我试图在JTree中向下更改节点的图标,然后更改到达该位置所需的所有Node。这是我到目前为止所拥有的。
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中的所有父文件夹显示该文件,我想成为一个BAD解析的文件夹图标。
答案 0 :(得分:0)
我认为最好的选择是使用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(node)时,它将返回TreeNodes的数组。 TreeNodes []的第一个索引是树模型的根。 TreeNodes []中的下一个节点是通向“节点”的根节点的子节点,依此类推,直到到达“节点”为止。
因此,通过使用for循环遍历TreeNodes [] pathToRoot中的每个节点,您将具有正确的节点路径,而不必使用getChildAt()。
据我了解,只要满足if条件,您就希望将路径中每个节点的Icon更改为“ node”。因此,使用增强的for循环遍历pathToRoot []中的每个TreeNode将允许您更改每个节点(包括t_node来自的节点)的图标