1

我有一个 JTree,它的节点是从 DefaultMutableTreeNode 驱动的。每个节点都可以验证或不验证。起初所有节点的图标都是相同的,但是,当我选择它们并按下验证按钮时,我将更改验证节点的图标我希望能够在每个节点上单击和写入,因此我不能使用 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;

    }

百万谢谢。

4

1 回答 1

3

DefaultTreeCellRenderer有设置器,允许设置打开图标、关闭图标和叶子图标。在被覆盖的 getTreeCellRendererComponent 中,在派生的渲染器类中根据需要设置这些图标,然后返回由 super.getTreeCellRendererComponent 返回的图标。当您在渲染之前为每个节点设置时,您可以轻松地为特定节点设置一些不同的图标。

于 2013-01-07T08:54:43.170 回答