Chinaunix首页 | 论坛 | 博客
  • 博客访问: 199372
  • 博文数量: 163
  • 博客积分: 4010
  • 博客等级: 上校
  • 技术积分: 1720
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-08 11:41
文章分类

全部博文(163)

文章存档

2011年(1)

2009年(162)

我的朋友

分类:

2009-07-07 18:22:13

如果想改变节点显示效果,可以通过设置setCellRenderer方法来实现。

  例子:这个例子是同继承DefaultTreeCellRenderer类,重写getTreeCellRendererComponent方法来改变节点显示方式

  Java代码


   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 {
  publiccomponentgetTreeCellRendererComponent(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;
  }
  }

 

阅读(587) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~