/* (swing1.1) *///package jp.gr.java_conf.tame.swing.examples;import java.util.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.tree.*;import javax.swing.event.*;import javax.swing.plaf.metal.*;import jp.gr.java_conf.tame.swing.tree.*;import jp.gr.java_conf.tame.swing.icon.*;/** * @version 1.0 01/12/99 */public class IconNodeTreeExample extends JFrame { public IconNodeTreeExample() { super("IconNode TreeExample"); String[] strs = {"swing home", // 0 "platf", // 1 "basic.txt", // 2 "metal.c", // 3 "metal.java", // 4 "metal.html", // 5 "Computer", // 6 "A:", // 7 "C:", // 8 "D:"}; // 9 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]); for (int i=2;i<=5;i++) nodes[1].add(nodes[i]); nodes[0].add(nodes[6]); for (int i=7;i<=9;i++) nodes[6].add(nodes[i]); // // set Icon directly // nodes[0].setIcon(MetalIconFactory.getFileChooserHomeFolderIcon()); // // use JTree default Icon // // nodes[1] // nodes[2] // // set Icon by user Object // // nodes[3] // nodes[4] // nodes[5] // // set Icon by name // nodes[6].setIconName("computer"); nodes[7].setIconName("floppyDrive"); nodes[8].setIconName("hardDrive"); nodes[9].setIconName("hardDrive"); JTree tree = new JTree( nodes[0] ); tree.putClientProperty("JTree.icons", makeIcons()); tree.setCellRenderer(new IconNodeRenderer()); JScrollPane sp = new JScrollPane(tree); getContentPane().add(sp, BorderLayout.CENTER); } private Hashtable makeIcons() { Hashtable icons = new Hashtable(); icons.put("floppyDrive",MetalIconFactory.getTreeFloppyDriveIcon()); icons.put("hardDrive" ,MetalIconFactory.getTreeHardDriveIcon()); icons.put("computer" ,MetalIconFactory.getTreeComputerIcon()); icons.put("c" ,TextIcons.getIcon("c")); icons.put("java" ,TextIcons.getIcon("java")); icons.put("html" ,TextIcons.getIcon("html")); return icons; } public static void main(String args[]) { IconNodeTreeExample frame = new IconNodeTreeExample(); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);} }); frame.setSize(300, 150); frame.setVisible(true); }}===============================================
/* (swing1.1) */ package jp.gr.java_conf.tame.swing.tree;import java.util.*;import java.awt.*;import javax.swing.*;import javax.swing.tree.*;/** * @version 1.0 01/12/99 */public 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("JTree.icons"); 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; }}================================================
/* (swing1.1.1beta2) */ package jp.gr.java_conf.tame.swing.tree;import java.util.*;import javax.swing.*;import javax.swing.tree.*;/** * @version 1.1 06/19/99 */public 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; }}================================
/* (swing1.1) */ package jp.gr.java_conf.tame.swing.icon;import java.util.*;import java.awt.*;import javax.swing.*;import javax.swing.plaf.metal.*;/** * @version 1.0 01/12/99 */public class TextIcons extends MetalIconFactory.TreeLeafIcon { protected String label; private static Hashtable labels; protected TextIcons() { } public void paintIcon(Component c, Graphics g, int x, int y) { super.paintIcon( c, g, x, y ); if (label != null) { FontMetrics fm = g.getFontMetrics(); int offsetX = (getIconWidth() - fm.stringWidth(label)) /2; int offsetY = (getIconHeight() - fm.getHeight()) /2 - 2; g.drawString(label, x + offsetX , y + offsetY + fm.getHeight()); } } public static Icon getIcon(String str) { if (labels == null) { labels = new Hashtable(); setDefaultSet(); } TextIcons icon = new TextIcons(); icon.label = (String)labels.get(str); return icon; } public static void setLabelSet(String ext, String label) { if (labels == null) { labels = new Hashtable(); setDefaultSet(); } labels.put(ext, label); } private static void setDefaultSet() { labels.put("c" ,"C"); labels.put("java" ,"J"); labels.put("html" ,"H"); labels.put("htm" ,"H"); // and so on /* labels.put("txt" ,"TXT"); labels.put("TXT" ,"TXT"); labels.put("cc" ,"C++"); labels.put("C" ,"C++"); labels.put("cpp" ,"C++"); labels.put("exe" ,"BIN"); labels.put("class" ,"BIN"); labels.put("gif" ,"GIF"); labels.put("GIF" ,"GIF"); labels.put("", ""); */ }}