xuzhenqinandy 发表于 2013-2-7 03:47:57

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

斯诺克爱好者网:http://www.kkyule.com

淘宝精品导航:http://www.nitaomei.com
如果想改变节点显示效果,可以通过设置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;    for (int i = 0; i < strs.length; i++) {      nodes = new IconNode(strs);    }    nodes.add(nodes);    nodes.add(nodes);    nodes.add(nodes);    nodes.add(nodes);    nodes.add(nodes);    nodes.add(nodes);    nodes.add(nodes);    nodes.setIcon(new ImageIcon("title4.gif"));    nodes.setIcon(new ImageIcon("title4.gif"));    nodes.setIcon(new ImageIcon("title4.gif"));    nodes.setIcon(new ImageIcon("title4.gif"));    nodes.setIcon(new ImageIcon("title4.gif"));    JTree tree = new JTree(nodes);    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.getIcon();      if (icon != null) {      icon.setImageObserver(new NodeImageObserver(tree, nodes));      }    }}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;}}
页: [1]
查看完整版本: Swing之JTree篇:在树节点中增加图片