java如何解决JTree中的显示问题?
我是编程初学者。我想创造一个全面的指挥官应用程序。我没有更大的问题,但那个问题我解决不了
要打印我的树,我使用我的类TreeConstructor中的函数getChild(),该类从JTreeModel实现。它工作得很好,但它打印文件或目录的所有路径,而不仅仅是文件名。我曾想过创建myJTree类,该类将从JTree类扩展而来,并覆盖打印节点的函数,但实际上我不知道该函数的位置和名称
类TreeConstructor实现TreeModel{
//To constructor we need to give path
//From where it it starts painting a tree
protected File root;
public TreeConstructor(File root) { this.root = root; }
//Giving root of a tree
@Override
public Object getRoot() {
return root;
}
//Function to change root
public void rootChanger(Object parent) {
this.root = (File)parent;
}
@Override
public Object getChild(Object parent, int index) {
String[] children = ((File)parent).list();
if((children.length<=index)||(children == null))return null;
return new File((File)parent,children[index]);
}
@Override
public int getChildCount(Object parent) {
String[] children = ((File)parent).list();
if(children == null) return 0;
return children.length;
}
@Override
public boolean isLeaf(Object node) { return ((File)node).isFile(); }
@Override
public int getIndexOfChild(Object parent, Object child) {
String[] children = ((File)parent).list();
if (children == null) return -1;
String childname = ((File)child).getName();
for(int i = 0; i < children.length; i++) {
if (childname.equals(children[i])) return i;
}
return -1;
}
@Override
public void valueForPathChanged(TreePath path, Object newValue) {}
@Override
public void addTreeModelListener(TreeModelListener l) {}
@Override
public void removeTreeModelListener(TreeModelListener l) {}
这是我的申请: https://i.stack.imgur.com/6AsiV.jpg
丹尼尔,我将非常感谢你的帮助
# 1 楼答案
这是我使用JTree的代码我可以用你的代码来渲染这个吗? 我不明白:/
# 2 楼答案
如果没有进一步的代码示例,我建议您查找以下内容:
Java JTree from directory (shows full path instead of just the name of the file)
根据您的实现,这可能是编写自己的渲染器的最简单方法
https://www.logicbig.com/tutorials/java-swing/jtree-renderer.html
# 3 楼答案
如前所述,您需要自己的渲染器。比如:
然后需要将渲染器设置到树中
此外,必须实现TreeModel接口中定义的方法,以提供JTree的正确工作。尤其是添加/删除ReveTreeModelListener。它们用于在模型更改时(例如,当用户重命名节点时)通知树