如何设置jtree 图标

来源:互联网 发布:godaddy域名赎回后解析 编辑:程序博客网 时间:2024/05/16 05:34
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;  
    }  
}
0 0
原创粉丝点击