通过JTree中节点的所有父节点环UP

问题描述 投票:0回答:1

我试图改变一个节点的图标倒在一个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的父文件夹,我想是一个坏解析的文件夹图标。

java jtree
1个回答
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(节点),它返回树节点的数组。该树节点[]的第一个指标是你的树模型的根。在树节点[]中的下一个节点是导致“节点”,等的根的孩子,直到“节点”为止。

因此,通过使用for循环要经过的TreeNode [] pathToRoot每个节点上,您将有正确的路径节点,而不必使用getChildAt()。

从我的理解,你想改变每个节点的图标的路径“节点”只要你的,如果条件得到满足。因此,使用增强的for循环要经过pathToRoot每个树节点[]将允许你改变每个节点的图标(包括t_node来自的节点)

© www.soinside.com 2019 - 2024. All rights reserved.