package examples; import java.util.*; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import javax.swing.*; import javax.swing.tree.*; /* * @author Kenneth J. Goldman, Washington University, kjg@wustl.edu * Created: Feb 8, 2005 */ class InfiniteTree implements TreeNode { String name; int level; InfiniteTree parent; ArrayList children = null; public InfiniteTree(String name, int level, InfiniteTree parent) { this.name = name; this.level = level; this.parent = parent; } public String toString() { return name; } public TreeNode getParent() { return parent; } public boolean isLeaf() { return false; } public boolean getAllowsChildren() { return true; } public int getChildCount() { return getChildren().size(); } public TreeNode getChildAt(int index) { return getChildren().get(index); } public int getIndex(TreeNode child) { return getChildren().indexOf(child); } private ArrayList getChildren() { if (children == null) { children = new ArrayList(); for (int i = 0; i < level; i++) children.add(new InfiniteTree(name + "." + (i+1), level+1, this)); } return children; } public Enumeration children() { return new EnumerationIterator(getChildren().iterator()); } // An adapter to provide an Enumeration for an Iterator class EnumerationIterator implements Enumeration { Iterator it; public EnumerationIterator(Iterator it) { this.it = it; } public boolean hasMoreElements() { return it.hasNext(); } public Object nextElement() { return it.next(); } } public static void main(String[] args) { // create a tree, providing the root node final JTree tree = new JTree(new InfiniteTree("1",2,null)); tree.setCellRenderer(new MyTreeCellRenderer()); JFrame f = new JFrame("This is far too silly."); f.add(new JScrollPane(tree)); f.pack(); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } static class MyTreeCellRenderer extends DefaultTreeCellRenderer { static final Font FONT = new Font("helvetica", Font.BOLD, 18); public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { JLabel label = (JLabel) super.getTreeCellRendererComponent(tree,value,sel,expanded, leaf,row,hasFocus); label.setFont(FONT); if (sel) { label.setForeground(Color.YELLOW); } if (value.toString().indexOf("3") > 8) { label.setText("HI"); label.setForeground(Color.RED); } return label; } } }