我试图改变一个节点的图标倒在一个JTree然后更改所有花了到那里的节点。这里是我到目前为止所。
private void LoopDirectoryTree(DefaultMutableTreeNode node, File lua_file, String icon_url) {
int childCount = node.getChildCount();
TreeIcon t_node = (TreeIcon)node.getUserObject();
if(t_node.getFile().equals(lua_file)){
t_node.setIcon(icon_url);
}
for (int i = 0; i < childCount; i++) {
DefaultMutableTreeNode childNode = (DefaultMutableTreeNode) node.getChildAt(i);
if (childNode.getChildCount() > 0) {
LoopDirectoryTree(childNode, lua_file, icon_url);
} else {
t_node = (TreeIcon)childNode.getUserObject();
// THIS IS WHERE I TRIED TO GO BACK UP (refer below)
if(t_node.getFile().equals(lua_file)){
// Icon to change
t_node.setIcon(icon_url);
}
}
}
}
我试图沿着线的东西:
if(t_node.getFile().equals(lua_file)){
// Icon to change
t_node.setIcon(icon_url);
while(childNode.getParent()!=null){
childNode = (DefaultMutableTreeNode)childNode.getParent();
t_node = (TreeIcon)childNode.getUserObject();
// Icon to change (DIFFERENT ICON THAN OTHER)
t_node.setIcon(NEW_ICON_URL);
}
}
但正如预期,没有工作。
基本上,我有文件夹和文件的一个JTree。我解析文件,以检查语法,如果它是坏的我想表明一个BAD解析的文件图标文件和所有它在JTree的父文件夹,我想是一个坏解析的文件夹图标。
我认为最好的办法是使用getPathToRoot()遍历JTree的。
实施例的解决方案
if(t_node.getFile().equals(lua_file)){
// Icon to change
t_node.setIcon(icon_url);
TreeNode[] pathToRoot = ((DefaultTreeModel)tree.getModel()).getPathToRoot(node);
for(TreeNode nToChangeIcon: pathToRoot){
((TreeNode)nToChangeIcon.getUserObject()).setIcon(NEW_ICON_URL);
}
}
当您使用getPathToRoot(节点),它返回树节点的数组。该树节点[]的第一个指标是你的树模型的根。在树节点[]中的下一个节点是导致“节点”,等的根的孩子,直到“节点”为止。
因此,通过使用for循环要经过的TreeNode [] pathToRoot每个节点上,您将有正确的路径节点,而不必使用getChildAt()。
从我的理解,你想改变每个节点的图标的路径“节点”只要你的,如果条件得到满足。因此,使用增强的for循环要经过pathToRoot每个树节点[]将允许你改变每个节点的图标(包括t_node来自的节点)