更改JTree中某节点的图标?(Change The icon of a certain Node

2019-10-17 13:22发布

我有一个JTree和它的节点从DefaultMutableTreeNode驱动。 每个节点都可以被验证或not.At首先节点的图标都是一样的,但是,我要改变验证节点的图标时我选择它们,然后按确认按钮。 我想有点击和写在每个节点上,所以我不能用JLabel的显示图标的能力 。 我作了如下的代码,但它返回NULLException。

class CustomIconRenderer extends DefaultTreeCellRenderer {
        ImageIcon defaultIcon;
        ImageIcon specialIcon;
        ImageIcon closeIcon;
        static DefaultTreeModel model;
        static myDefaultMutableTreeNode root;

        public CustomIconRenderer() 
        {
            openIcon = new ImageIcon(CustomIconRenderer.class.getResource("icons/question.png"));
            closeIcon = new ImageIcon(CustomIconRenderer.class.getResource("icons/Target-New-Logo.jpg"));
            setLeafIcon(closeIcon);
        }

        @Override
        public Component getTreeCellRendererComponent(JTree tree,Object value,boolean sel,boolean expanded,boolean leaf,int row,boolean hasFocus)
        {
               super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
               Object nodeObj = ((DefaultMutableTreeNode)value).getUserObject();

          Check_each_nodes_are_verified_change_the_icon();
          return this;
        }
    }

    public class myDefaultMutableTreeNode extends DefaultMutableTreeNode{

        private static int id=0;
        private int nodeid;
        private int verify;
        private int depth;

    }

数以百万计感谢。

Answer 1:

该DefaultTreeCellRenderer有setter方法,允许设置打开图标,关闭的图标和叶图标。 重写的getTreeCellRendererComponent内部,设置在派生类渲染这些图标,你怎么想,然后返回由super.getTreeCellRendererComponent返回。 当你为每个节点设置在渲染之前,你可以很容易地对特定节点的一些不同的图标。



文章来源: Change The icon of a certain Node in JTree?