jtree 中如何修改 java自身的那个 像钥匙 一样的 小图标啊  就是 节点图片 前面的那个小图标 

解决方案 »

  1.   

    import java.awt.*;  
    import java.awt.image.BufferedImage;  
    import java.io.*;  
    import javax.imageio.ImageIO;  
    import javax.swing.*;  
    import javax.swing.tree.*;  public class TreeIcons  
    {  
        BufferedImage[] images;      public TreeIcons(BufferedImage[] images)  
        {  
            this.images = images;  
        }      private JPanel getContent()  
        {  
            JPanel panel = new JPanel(new GridLayout(1,0));  
            panel.add(new JScrollPane(getLeftTree()));  
            panel.add(new JScrollPane(getRightTree()));  
            return panel;  
        }      private JTree getLeftTree()  
        {  
            JTree tree = getTree();  
            DefaultTreeCellRenderer renderer =  
            (DefaultTreeCellRenderer)tree.getCellRenderer();  
            // make changes to renderer for this tree  
            // works okay if the size of the new images does  
            // not exceed the size of the default images  
            renderer.setClosedIcon(new ImageIcon(images[0]));  
            renderer.setOpenIcon(new ImageIcon(images[1]));  
            renderer.setLeafIcon(new ImageIcon(images[2]));  
            return tree;  
        }      private JTree getRightTree()  
        {  
            JTree tree = getTree();  
            // set a renderer that allows more fine-grained  
            // control of rendering for varying conditions  
            tree.setCellRenderer(new IconRenderer(images));  
            return tree;  
        }      private JTree getTree()  
        {  
            String[] birds = {  
                // branches  |<-- child leaf nodes -->|  
                "hawks",   "gray",    "red-tailed", "rough-legged",  
                "falcons", "harrier", "kestrel",    "kite",   
                "owls",    "barred",  "saw-whet",   "snowy"  
                };  
            DefaultMutableTreeNode root = new DefaultMutableTreeNode("birds");  
            DefaultMutableTreeNode[] nodes = new DefaultMutableTreeNode[birds.length];  
            for(int j = 0; j < nodes.length; j++)  
                nodes[j] = new DefaultMutableTreeNode(birds[j]);  
            for(int j = 0; j < 9; j += 4)  
            {  
                root.insert(nodes[j], j % 3);  
                for(int k = j + 1; k < j + 4; k++)  
                nodes[j].insert(nodes[k], k - j - 1);  
            }  
            DefaultTreeModel model = new DefaultTreeModel(root);  
            return new JTree(model);  
        }         public static void main(String[] args) throws IOException  
        {  
            String[] ids = { "closed16", "open16", "leaf16" };  
            BufferedImage[] bis = new BufferedImage[ids.length];  
            for(int j = 0; j < bis.length; j++)  
            bis[j] = ImageIO.read(new File("images/" + ids[j] + ".gif"));  
            // to make uniform changes for all JTrees in this app  
            //UIManager.put("Tree.closedIcon", new ImageIcon(bis[0]));  
            //UIManager.put("Tree.openIcon",   new ImageIcon(bis[1]));  
            //UIManager.put("Tree.leafIcon",   new ImageIcon(bis[2]));  
            JFrame f = new JFrame();  
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
            f.setContentPane(new TreeIcons(bis).getContent());  
            f.setSize(500,400);  
            f.setLocation(200,200);  
            f.setVisible(true);  
        }  
    }  class IconRenderer extends DefaultTreeCellRenderer  
    {  
        ImageIcon closedIcon;  
        ImageIcon openIcon;  
        ImageIcon leafIcon;      public IconRenderer(BufferedImage[] images)  
        {  
            closedIcon = new ImageIcon(images[0]);  
            openIcon   = new ImageIcon(images[1]);  
            leafIcon   = new ImageIcon(images[2]);  
        }      public Component getTreeCellRendererComponent(JTree tree,  
                                                        Object value,  
                                                        boolean sel,  
                                                        boolean expanded,  
                                                        boolean leaf,  
                                                        int row,  
                                                        boolean hasFocus)  
        {  
            // start with default behavior  
            super.getTreeCellRendererComponent(tree, value, sel, expanded,   
            leaf, row, hasFocus);          // customize based on local conditions/state  
            DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;  
            String userObject = (String)node.getUserObject();  
            boolean isOwl = userObject.equalsIgnoreCase("owls");  
            if(isOwl)  
                setIcon(closedIcon);  
            else if(leaf)  
                setIcon(leafIcon);  
            else if(expanded)  
                setIcon(openIcon);  
            return this;  
        }  
    }
      

  2.   

    设置一个自定义的TreeCellRenderer对象就行了,一般是扩展DefaultTreeCellRenderer