📄 animatedicontreeexample2.java
字号:
/* (swing1.1.1beta2) */package tame.examples;import java.awt.BorderLayout;import java.awt.Image;import java.awt.Rectangle;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.awt.image.ImageObserver;import java.util.Enumeration;import java.util.Hashtable;import java.util.Vector;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTree;import javax.swing.tree.DefaultTreeModel;import javax.swing.tree.TreeNode;import javax.swing.tree.TreePath;import tame.tree.IconNode;import tame.tree.IconNodeRenderer;/**@author Nobuo Tamemasa@version 1.0 06/20/99*/public class AnimatedIconTreeExample2 extends JFrame { final static String CAT = "cat"; final static String DOG = "dog"; public AnimatedIconTreeExample2() { super("AnimatedIconTreeExample2"); 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]); // If you want to share the ImageIcon with a node. nodes[2].setIconName(CAT); nodes[3].setIconName(CAT); nodes[5].setIconName(DOG); nodes[6].setIconName(DOG); nodes[7].setIconName(DOG); Hashtable icons = new Hashtable(); icons.put(CAT ,new ImageIcon("images/3-119.gif")); icons.put(DOG ,new ImageIcon("images/3-6.gif")); JTree tree = new JTree( nodes[0] ); tree.putClientProperty("JTree.icons", icons); tree.setCellRenderer(new IconNodeRenderer()); setImageObserver(tree, nodes, icons); JScrollPane sp = new JScrollPane(tree); getContentPane().add(sp, BorderLayout.CENTER); } private void setImageObserver(JTree tree,IconNode[] nodes,Hashtable icons) { Hashtable observers = new Hashtable(); for (int i=0;i<nodes.length;i++) { ImageIcon icon = (ImageIcon)nodes[i].getIcon(); if (icon != null) { Vector repaintNodes = new Vector(); repaintNodes.addElement(nodes[i]); icon.setImageObserver(new NodeImageObserver(tree, repaintNodes)); } else { String iconName = nodes[i].getIconName(); if (iconName != null) { Vector repaintNodes = (Vector)observers.get(iconName); if (repaintNodes == null) { repaintNodes = new Vector(); observers.put(iconName, repaintNodes); } repaintNodes.addElement(nodes[i]); } } } Enumeration enum1 = observers.keys(); while (enum1.hasMoreElements()) { String iconName = (String)enum1.nextElement(); Vector repaintNodes = (Vector)observers.get(iconName); ImageIcon icon = (ImageIcon)icons.get(iconName); icon.setImageObserver(new NodeImageObserver(tree, repaintNodes)); } } class NodeImageObserver implements ImageObserver { JTree tree; DefaultTreeModel model; Vector nodes; NodeImageObserver(JTree tree,Vector nodes) { this.tree = tree; this.model = (DefaultTreeModel)tree.getModel(); this.nodes = nodes; } public boolean imageUpdate(Image img, int flags, int x, int y, int w, int h) { if ((flags & (FRAMEBITS|ALLBITS)) != 0) { Enumeration enum1 = nodes.elements(); while (enum1.hasMoreElements()) { TreeNode node = (TreeNode)enum1.nextElement(); 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[]) { AnimatedIconTreeExample2 frame = new AnimatedIconTreeExample2(); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);} }); frame.setSize(280, 200); frame.setVisible(true); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -