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