Swing之JTree篇:在树节点中增加图片

来源:互联网 发布:mac切换窗口的快捷键 编辑:程序博客网 时间:2024/05/22 17:13
如果想改变节点显示效果,可以通过设置setCellRenderer方法来实现。

例子:这个例子是同继承DefaultTreeCellRenderer类,重写getTreeCellRendererComponent方法来改变节点显示方式
public class AnimatedIconTreeExample extends JFrame {       public AnimatedIconTreeExample() {       super("AnimatedIconTreeExample");       String[] strs = { "CARNIVORA", // 0           "Felidae", // 1           "Acinonyx jutatus  (cheetah)", // 2           "Panthera leo  (lion)", // 3           "Canidae", // 4           "Canis lupus  (wolf)", // 5           "Lycaon pictus  (lycaon)", // 6           "Vulpes Vulpes  (fox)" }; // 7         IconNode[] nodes = new IconNode[strs.length];       for (int i = 0; i < strs.length; i++) {         nodes[i] = new IconNode(strs[i]);       }       nodes[0].add(nodes[1]);       nodes[0].add(nodes[4]);       nodes[1].add(nodes[2]);       nodes[1].add(nodes[3]);       nodes[4].add(nodes[5]);       nodes[4].add(nodes[6]);       nodes[4].add(nodes[7]);         nodes[2].setIcon(new ImageIcon("title4.gif"));       nodes[3].setIcon(new ImageIcon("title4.gif"));       nodes[5].setIcon(new ImageIcon("title4.gif"));       nodes[6].setIcon(new ImageIcon("title4.gif"));       nodes[7].setIcon(new ImageIcon("title4.gif"));         JTree tree = new JTree(nodes[0]);       tree.setCellRenderer(new IconNodeRenderer());       setImageObserver(tree, nodes);         JScrollPane sp = new JScrollPane(tree);       getContentPane().add(sp, BorderLayout.CENTER);     }       private void setImageObserver(JTree tree, IconNode[] nodes) {       for (int i = 0; i < nodes.length; i++) {         ImageIcon icon = (ImageIcon) nodes[i].getIcon();         if (icon != null) {           icon.setImageObserver(new NodeImageObserver(tree, nodes[i]));         }       }     }       class NodeImageObserver implements ImageObserver {       JTree tree;         DefaultTreeModel model;         TreeNode node;         NodeImageObserver(JTree tree, TreeNode node) {         this.tree = tree;         this.model = (DefaultTreeModel) tree.getModel();         this.node = node;       }         public boolean imageUpdate(Image img, int flags, int x, int y, int w,           int h) {         if ((flags & (FRAMEBITS | ALLBITS)) != 0) {           TreePath path = new TreePath(model.getPathToRoot(node));           Rectangle rect = tree.getPathBounds(path);           if (rect != null) {             tree.repaint(rect);           }         }         return (flags & (ALLBITS | ABORT)) == 0;       }     }       public static void main(String args[]) {       try {           UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");       } catch (Exception evt) {}         AnimatedIconTreeExample frame = new AnimatedIconTreeExample();       frame.addWindowListener(new WindowAdapter() {         public void windowClosing(WindowEvent e) {           System.exit(0);         }       });       frame.setSize(280, 200);       frame.setVisible(true);     }   }     class IconNodeRenderer extends DefaultTreeCellRenderer {       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);         Icon icon = ((IconNode) value).getIcon();         if (icon == null) {         Hashtable icons = (Hashtable) tree.getClientProperty("title4.gif");         String name = ((IconNode) value).getIconName();         if ((icons != null) && (name != null)) {           icon = (Icon) icons.get(name);           if (icon != null) {             setIcon(icon);           }         }       } else {         setIcon(icon);       }         return this;     }   }     class IconNode extends DefaultMutableTreeNode {       protected Icon icon;       protected String iconName;       public IconNode() {       this(null);     }       public IconNode(Object userObject) {       this(userObject, true, null);     }       public IconNode(Object userObject, boolean allowsChildren, Icon icon) {       super(userObject, allowsChildren);       this.icon = icon;     }       public void setIcon(Icon icon) {       this.icon = icon;     }       public Icon getIcon() {       return icon;     }       public String getIconName() {       if (iconName != null) {         return iconName;       } else {         String str = userObject.toString();         int index = str.lastIndexOf(".");         if (index != -1) {           return str.substring(++index);         } else {           return null;         }       }     }       public void setIconName(String name) {       iconName = name;     }     }  

原创粉丝点击