View Javadoc
1 /* 2 * JComponentTreeModel.java 3 * 4 * Created on July 29, 2001, 10:00 PM 5 */ 6 7 package com.bonevich.javax.swing.tree; 8 9 import javax.swing.JComponent; 10 import javax.swing.tree.TreeModel; 11 import javax.swing.tree.TreePath; 12 import javax.swing.event.TreeModelListener; 13 import javax.swing.event.TreeModelEvent; 14 15 import java.util.*; 16 17 /*** 18 * 19 * @author Jeffrey Bonevich <bonevich@telocity.com> 20 * @version $Id: JComponentTreeModel.html,v 1.1 2009/03/07 17:55:50 jbonevic Exp $ 21 */ 22 public class JComponentTreeModel implements TreeModel 23 { 24 private JComponent root = null; 25 private List modelListeners = new LinkedList(); 26 27 /*** Creates new JComponentTreeModel */ 28 public JComponentTreeModel(JComponent node) 29 { 30 this.root = node; 31 } 32 33 /*** 34 * Add <CODE>node</CODE> into the tree as a child of 35 * the root node. 36 * @param node javax.swing.JComponent 37 */ 38 public void addToRoot(JComponent node) 39 { 40 this.root.add(node); 41 } 42 43 //////////////// Fire events ////////////////////////////////////////////// 44 45 /*** 46 * Fire off event notification to any <CODE>TreeModelListener</CODE>s 47 * out there. 48 * @param oldRoot javax.swing.JComponent 49 */ 50 protected void fireTreeStructureChanged(JComponent oldRoot) 51 { 52 TreeModelEvent e = new TreeModelEvent(this, new Object[] {oldRoot}); 53 Iterator listenerItr = this.modelListeners.iterator(); 54 while (listenerItr.hasNext()) 55 { 56 ((TreeModelListener)listenerItr.next()).treeStructureChanged(e); 57 // what about the other types of events - node added, removed, etc. 58 // FIXME: see TreeModelListener javadoc 59 } 60 } 61 62 //////////////// TreeModel interface implementation /////////////////////// 63 64 /*** 65 * Adds a listener for any <CODE>TreeModelEvent</CODE>s posted 66 * after the tree is altered. 67 * @param listener javax.swing.event.TreeModelListener 68 */ 69 public void addTreeModelListener(TreeModelListener listener) 70 { 71 modelListeners.add(listener); 72 } 73 74 /*** 75 * Returns the <CODE>JComponent</CODE> contained by <CODE>parent</CODE> 76 * at index <CODE>index</CODE>. 77 * @param parent java.lang.Object 78 * @param index int 79 * @return java.lang.Object 80 */ 81 public Object getChild(Object parent, int index) 82 { 83 JComponent cmp = (JComponent)parent; 84 return cmp.getComponent(index); 85 } 86 87 /*** 88 * Returns the count of <CODE>JComponent</CODE>s 89 * contained by <CODE>parent</CODE>. 90 * @param parent java.lang.Object 91 * @return int 92 */ 93 public int getChildCount(Object parent) 94 { 95 JComponent cmp = (JComponent)parent; 96 return cmp.getComponentCount(); 97 } 98 99 /*** 100 * Returns the index of <CODE>child</CODE> 101 * among the <CODE>JComponent</CODE>s contained by 102 * <CODE>parent</CODE>. 103 * @param parent java.lang.Object 104 * @param child java.lang.Object 105 * @return int 106 */ 107 public int getIndexOfChild(Object parent, Object child) 108 { 109 JComponent cmp = (JComponent)parent; 110 List children = Arrays.asList(cmp.getComponents()); 111 return children.indexOf(child); 112 } 113 114 /*** 115 * Returns the root of the tree. 116 * @return java.lang.Object 117 */ 118 public Object getRoot() 119 { 120 return root; 121 } 122 123 /*** 124 * Returns true if <CODE>node</CODE> is a leaf. 125 * @param node java.lang.Object 126 * @return boolean 127 */ 128 public boolean isLeaf(Object node) 129 { 130 return getChildCount(node) == 0; 131 } 132 133 /*** 134 * Removes a listener previously added with addTreeModelListener(). 135 * @param listener javax.swing.event.TreeModelListener 136 */ 137 public void removeTreeModelListener(TreeModelListener listener) 138 { 139 modelListeners.remove(listener); 140 } 141 142 /*** 143 * Called when the user has altered the value for the item 144 * identified by path to newValue. 145 * @param treePath javax.swing.tree.TreePath 146 * @param newValue java.lang.Object 147 */ 148 public void valueForPathChanged(TreePath treePath, Object newValue) 149 { 150 // FIXME: Not sure what to do here? Does this mean that newValue 151 // is replacing the last element in treePath? or that newValue 152 // replaces treePath altogether???? 153 } 154 }

This page was automatically generated by Maven