/* (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("", "");
*/
}
}