| |
|
| java.lang.Object javax.swing.tree.DefaultMutableTreeNode
DefaultMutableTreeNode | public class DefaultMutableTreeNode extends Object implements Cloneable,MutableTreeNode,Serializable(Code) | | A DefaultMutableTreeNode is a general-purpose node in a tree data
structure.
For examples of using default mutable tree nodes, see
How to Use Trees
in The Java Tutorial.
A tree node may have at most one parent and 0 or more children.
DefaultMutableTreeNode provides operations for examining and modifying a
node's parent and children and also operations for examining the tree that
the node is a part of. A node's tree is the set of all nodes that can be
reached by starting at the node and following all the possible links to
parents and children. A node with no parent is the root of its tree; a
node with no children is a leaf. A tree may consist of many subtrees,
each node acting as the root for its own subtree.
This class provides enumerations for efficiently traversing a tree or
subtree in various orders or for following the path between two nodes.
A DefaultMutableTreeNode may also hold a reference to a user object, the
use of which is left to the user. Asking a DefaultMutableTreeNode for its
string representation with toString() returns the string
representation of its user object.
This is not a thread safe class.If you intend to use
a DefaultMutableTreeNode (or a tree of TreeNodes) in more than one thread, you
need to do your own synchronizing. A good convention to adopt is
synchronizing on the root node of a tree.
While DefaultMutableTreeNode implements the MutableTreeNode interface and
will allow you to add in any implementation of MutableTreeNode not all
of the methods in DefaultMutableTreeNode will be applicable to all
MutableTreeNodes implementations. Especially with some of the enumerations
that are provided, using some of these methods assumes the
DefaultMutableTreeNode contains only DefaultMutableNode instances. All
of the TreeNode/MutableTreeNode methods will behave as defined no
matter what implementations are added.
Warning:
Serialized objects of this class will not be compatible with
future Swing releases. The current serialization support is
appropriate for short term storage or RMI between applications running
the same version of Swing. As of 1.4, support for long term storage
of all JavaBeansTM
has been added to the java.beans package.
Please see
java.beans.XMLEncoder .
See Also: MutableTreeNode version: 1.32 07/08/07 author: Rob Davis |
Constructor Summary | |
public | DefaultMutableTreeNode() Creates a tree node that has no parent and no children, but which
allows children. | public | DefaultMutableTreeNode(Object userObject) Creates a tree node with no parent, no children, but which allows
children, and initializes it with the specified user object. | public | DefaultMutableTreeNode(Object userObject, boolean allowsChildren) Creates a tree node with no parent, no children, initialized with
the specified user object, and that allows children only if
specified. |
Method Summary | |
public void | add(MutableTreeNode newChild) Removes newChild from its parent and makes it a child of
this node by adding it to the end of this node's child array. | public Enumeration | breadthFirstEnumeration() Creates and returns an enumeration that traverses the subtree rooted at
this node in breadth-first order. | public Enumeration | children() Creates and returns a forward-order enumeration of this node's
children. | public Object | clone() Overridden to make clone public. | public Enumeration | depthFirstEnumeration() Creates and returns an enumeration that traverses the subtree rooted at
this node in depth-first order. | public boolean | getAllowsChildren() Returns true if this node is allowed to have children. | public TreeNode | getChildAfter(TreeNode aChild) Returns the child in this node's child array that immediately
follows aChild , which must be a child of this node. | public TreeNode | getChildAt(int index) Returns the child at the specified index in this node's child array. | public TreeNode | getChildBefore(TreeNode aChild) Returns the child in this node's child array that immediately
precedes aChild , which must be a child of this node. | public int | getChildCount() Returns the number of children of this node. | public int | getDepth() Returns the depth of the tree rooted at this node -- the longest
distance from this node to a leaf. | public TreeNode | getFirstChild() Returns this node's first child. | public DefaultMutableTreeNode | getFirstLeaf() Finds and returns the first leaf that is a descendant of this node --
either this node or its first child's first leaf. | public int | getIndex(TreeNode aChild) Returns the index of the specified child in this node's child array.
If the specified node is not a child of this node, returns
-1 . | public TreeNode | getLastChild() Returns this node's last child. | public DefaultMutableTreeNode | getLastLeaf() Finds and returns the last leaf that is a descendant of this node --
either this node or its last child's last leaf. | public int | getLeafCount() Returns the total number of leaves that are descendants of this node.
If this node is a leaf, returns 1 . | public int | getLevel() Returns the number of levels above this node -- the distance from
the root to this node. | public DefaultMutableTreeNode | getNextLeaf() Returns the leaf after this node or null if this node is the
last leaf in the tree.
In this implementation of the MutableNode interface,
this operation is very inefficient. | public DefaultMutableTreeNode | getNextNode() Returns the node that follows this node in a preorder traversal of this
node's tree. | public DefaultMutableTreeNode | getNextSibling() Returns the next sibling of this node in the parent's children array. | public TreeNode | getParent() Returns this node's parent or null if this node has no parent. | public TreeNode[] | getPath() Returns the path from the root, to get to this node. | protected TreeNode[] | getPathToRoot(TreeNode aNode, int depth) Builds the parents of node up to and including the root node,
where the original node is the last element in the returned array. | public DefaultMutableTreeNode | getPreviousLeaf() Returns the leaf before this node or null if this node is the
first leaf in the tree.
In this implementation of the MutableNode interface,
this operation is very inefficient. | public DefaultMutableTreeNode | getPreviousNode() Returns the node that precedes this node in a preorder traversal of
this node's tree. | public DefaultMutableTreeNode | getPreviousSibling() Returns the previous sibling of this node in the parent's children
array. | public TreeNode | getRoot() Returns the root of the tree that contains this node. | public TreeNode | getSharedAncestor(DefaultMutableTreeNode aNode) Returns the nearest common ancestor to this node and aNode .
Returns null, if no such ancestor exists -- if this node and
aNode are in different trees or if aNode is
null. | public int | getSiblingCount() Returns the number of siblings of this node. | public Object | getUserObject() Returns this node's user object. | public Object[] | getUserObjectPath() Returns the user object path, from the root, to get to this node. | public void | insert(MutableTreeNode newChild, int childIndex) Removes newChild from its present parent (if it has a
parent), sets the child's parent to this node, and then adds the child
to this node's child array at index childIndex . | public boolean | isLeaf() Returns true if this node has no children. | public boolean | isNodeAncestor(TreeNode anotherNode) Returns true if anotherNode is an ancestor of this node
-- if it is this node, this node's parent, or an ancestor of this
node's parent. | public boolean | isNodeChild(TreeNode aNode) Returns true if aNode is a child of this node. | public boolean | isNodeDescendant(DefaultMutableTreeNode anotherNode) Returns true if anotherNode is a descendant of this node
-- if it is this node, one of this node's children, or a descendant of
one of this node's children. | public boolean | isNodeRelated(DefaultMutableTreeNode aNode) Returns true if and only if aNode is in the same tree
as this node. | public boolean | isNodeSibling(TreeNode anotherNode) Returns true if anotherNode is a sibling of (has the
same parent as) this node. | public boolean | isRoot() Returns true if this node is the root of the tree. | public Enumeration | pathFromAncestorEnumeration(TreeNode ancestor) Creates and returns an enumeration that follows the path from
ancestor to this node. | public Enumeration | postorderEnumeration() Creates and returns an enumeration that traverses the subtree rooted at
this node in postorder. | public Enumeration | preorderEnumeration() Creates and returns an enumeration that traverses the subtree rooted at
this node in preorder. | public void | remove(int childIndex) Removes the child at the specified index from this node's children
and sets that node's parent to null. | public void | remove(MutableTreeNode aChild) Removes aChild from this node's child array, giving it a
null parent. | public void | removeAllChildren() Removes all of this node's children, setting their parents to null. | public void | removeFromParent() Removes the subtree rooted at this node from the tree, giving this
node a null parent. | public void | setAllowsChildren(boolean allows) Determines whether or not this node is allowed to have children. | public void | setParent(MutableTreeNode newParent) Sets this node's parent to newParent but does not
change the parent's child array. | public void | setUserObject(Object userObject) Sets the user object for this node to userObject . | public String | toString() Returns the result of sending toString() to this node's
user object, or the empty string if the node has no user object. |
EMPTY_ENUMERATION | final public static Enumeration<TreeNode> EMPTY_ENUMERATION(Code) | | An enumeration that is always empty. This is used when an enumeration
of a leaf node's children is requested.
|
allowsChildren | protected boolean allowsChildren(Code) | | true if the node is able to have children
|
children | protected Vector children(Code) | | array of children, may be null if this node has no children
|
userObject | protected transient Object userObject(Code) | | optional user object
|
DefaultMutableTreeNode | public DefaultMutableTreeNode()(Code) | | Creates a tree node that has no parent and no children, but which
allows children.
|
DefaultMutableTreeNode | public DefaultMutableTreeNode(Object userObject)(Code) | | Creates a tree node with no parent, no children, but which allows
children, and initializes it with the specified user object.
Parameters: userObject - an Object provided by the user that constitutesthe node's data |
DefaultMutableTreeNode | public DefaultMutableTreeNode(Object userObject, boolean allowsChildren)(Code) | | Creates a tree node with no parent, no children, initialized with
the specified user object, and that allows children only if
specified.
Parameters: userObject - an Object provided by the user that constitutesthe node's data Parameters: allowsChildren - if true, the node is allowed to have childnodes -- otherwise, it is always a leaf node |
breadthFirstEnumeration | public Enumeration breadthFirstEnumeration()(Code) | | Creates and returns an enumeration that traverses the subtree rooted at
this node in breadth-first order. The first node returned by the
enumeration's nextElement() method is this node.
Modifying the tree by inserting, removing, or moving a node invalidates
any enumerations created before the modification.
See Also: DefaultMutableTreeNode.depthFirstEnumeration an enumeration for traversing the tree in breadth-first order |
children | public Enumeration children()(Code) | | Creates and returns a forward-order enumeration of this node's
children. Modifying this node's child array invalidates any child
enumerations created before the modification.
an Enumeration of this node's children |
clone | public Object clone()(Code) | | Overridden to make clone public. Returns a shallow copy of this node;
the new node has no parent or children and has a reference to the same
user object, if any.
a copy of this node |
depthFirstEnumeration | public Enumeration depthFirstEnumeration()(Code) | | Creates and returns an enumeration that traverses the subtree rooted at
this node in depth-first order. The first node returned by the
enumeration's nextElement() method is the leftmost leaf.
This is the same as a postorder traversal.
Modifying the tree by inserting, removing, or moving a node invalidates
any enumerations created before the modification.
See Also: DefaultMutableTreeNode.breadthFirstEnumeration See Also: DefaultMutableTreeNode.postorderEnumeration an enumeration for traversing the tree in depth-first order |
getAllowsChildren | public boolean getAllowsChildren()(Code) | | Returns true if this node is allowed to have children.
true if this node allows children, else false |
getChildAfter | public TreeNode getChildAfter(TreeNode aChild)(Code) | | Returns the child in this node's child array that immediately
follows aChild , which must be a child of this node. If
aChild is the last child, returns null. This method
performs a linear search of this node's children for
aChild and is O(n) where n is the number of children; to
traverse the entire array of children, use an enumeration instead.
See Also: DefaultMutableTreeNode.children exception: IllegalArgumentException - if aChild isnull or is not a child of this node the child of this node that immediately followsaChild |
getChildAt | public TreeNode getChildAt(int index)(Code) | | Returns the child at the specified index in this node's child array.
Parameters: index - an index into this node's child array exception: ArrayIndexOutOfBoundsException - if index is out of bounds the TreeNode in this node's child array at the specified index |
getChildBefore | public TreeNode getChildBefore(TreeNode aChild)(Code) | | Returns the child in this node's child array that immediately
precedes aChild , which must be a child of this node. If
aChild is the first child, returns null. This method
performs a linear search of this node's children for aChild
and is O(n) where n is the number of children.
exception: IllegalArgumentException - if aChild is nullor is not a child of this node the child of this node that immediately precedesaChild |
getChildCount | public int getChildCount()(Code) | | Returns the number of children of this node.
an int giving the number of children of this node |
getDepth | public int getDepth()(Code) | | Returns the depth of the tree rooted at this node -- the longest
distance from this node to a leaf. If this node has no children,
returns 0. This operation is much more expensive than
getLevel() because it must effectively traverse the entire
tree rooted at this node.
See Also: DefaultMutableTreeNode.getLevel the depth of the tree whose root is this node |
getFirstChild | public TreeNode getFirstChild()(Code) | | Returns this node's first child. If this node has no children,
throws NoSuchElementException.
the first child of this node exception: NoSuchElementException - if this node has no children |
getIndex | public int getIndex(TreeNode aChild)(Code) | | Returns the index of the specified child in this node's child array.
If the specified node is not a child of this node, returns
-1 . This method performs a linear search and is O(n)
where n is the number of children.
Parameters: aChild - the TreeNode to search for among this node's children exception: IllegalArgumentException - if aChild is null an int giving the index of the node in this node's child array, or -1 if the specified node is a nota child of this node |
getLastChild | public TreeNode getLastChild()(Code) | | Returns this node's last child. If this node has no children,
throws NoSuchElementException.
the last child of this node exception: NoSuchElementException - if this node has no children |
getLeafCount | public int getLeafCount()(Code) | | Returns the total number of leaves that are descendants of this node.
If this node is a leaf, returns 1 . This method is O(n)
where n is the number of descendants of this node.
See Also: DefaultMutableTreeNode.isNodeAncestor the number of leaves beneath this node |
getLevel | public int getLevel()(Code) | | Returns the number of levels above this node -- the distance from
the root to this node. If this node is the root, returns 0.
See Also: DefaultMutableTreeNode.getDepth the number of levels above this node |
getNextLeaf | public DefaultMutableTreeNode getNextLeaf()(Code) | | Returns the leaf after this node or null if this node is the
last leaf in the tree.
In this implementation of the MutableNode interface,
this operation is very inefficient. In order to determine the
next node, this method first performs a linear search in the
parent's child-list in order to find the current node.
That implementation makes the operation suitable for short
traversals from a known position. But to traverse all of the
leaves in the tree, you should use depthFirstEnumeration
to enumerate the nodes in the tree and use isLeaf
on each node to determine which are leaves.
See Also: DefaultMutableTreeNode.depthFirstEnumeration See Also: DefaultMutableTreeNode.isLeaf returns the next leaf past this node |
getNextNode | public DefaultMutableTreeNode getNextNode()(Code) | | Returns the node that follows this node in a preorder traversal of this
node's tree. Returns null if this node is the last node of the
traversal. This is an inefficient way to traverse the entire tree; use
an enumeration, instead.
See Also: DefaultMutableTreeNode.preorderEnumeration the node that follows this node in a preorder traversal, ornull if this node is last |
getNextSibling | public DefaultMutableTreeNode getNextSibling()(Code) | | Returns the next sibling of this node in the parent's children array.
Returns null if this node has no parent or is the parent's last child.
This method performs a linear search that is O(n) where n is the number
of children; to traverse the entire array, use the parent's child
enumeration instead.
See Also: DefaultMutableTreeNode.children the sibling of this node that immediately follows this node |
getParent | public TreeNode getParent()(Code) | | Returns this node's parent or null if this node has no parent.
this node's parent TreeNode, or null if this node has no parent |
getPath | public TreeNode[] getPath()(Code) | | Returns the path from the root, to get to this node. The last
element in the path is this node.
an array of TreeNode objects giving the path, where thefirst element in the path is the root and the lastelement is this node. |
getPathToRoot | protected TreeNode[] getPathToRoot(TreeNode aNode, int depth)(Code) | | Builds the parents of node up to and including the root node,
where the original node is the last element in the returned array.
The length of the returned array gives the node's depth in the
tree.
Parameters: aNode - the TreeNode to get the path for Parameters: depth - an int giving the number of steps already taken towardsthe root (on recursive calls), used to size the returned array an array of TreeNodes giving the path from the root to thespecified node |
getPreviousLeaf | public DefaultMutableTreeNode getPreviousLeaf()(Code) | | Returns the leaf before this node or null if this node is the
first leaf in the tree.
In this implementation of the MutableNode interface,
this operation is very inefficient. In order to determine the
previous node, this method first performs a linear search in the
parent's child-list in order to find the current node.
That implementation makes the operation suitable for short
traversals from a known position. But to traverse all of the
leaves in the tree, you should use depthFirstEnumeration
to enumerate the nodes in the tree and use isLeaf
on each node to determine which are leaves.
See Also: DefaultMutableTreeNode.depthFirstEnumeration See Also: DefaultMutableTreeNode.isLeaf returns the leaf before this node |
getPreviousNode | public DefaultMutableTreeNode getPreviousNode()(Code) | | Returns the node that precedes this node in a preorder traversal of
this node's tree. Returns null if this node is the
first node of the traversal -- the root of the tree.
This is an inefficient way to
traverse the entire tree; use an enumeration, instead.
See Also: DefaultMutableTreeNode.preorderEnumeration the node that precedes this node in a preorder traversal, ornull if this node is the first |
getPreviousSibling | public DefaultMutableTreeNode getPreviousSibling()(Code) | | Returns the previous sibling of this node in the parent's children
array. Returns null if this node has no parent or is the parent's
first child. This method performs a linear search that is O(n) where n
is the number of children.
the sibling of this node that immediately precedes this node |
getSiblingCount | public int getSiblingCount()(Code) | | Returns the number of siblings of this node. A node is its own sibling
(if it has no parent or no siblings, this method returns
1 ).
the number of siblings of this node |
getUserObjectPath | public Object[] getUserObjectPath()(Code) | | Returns the user object path, from the root, to get to this node.
If some of the TreeNodes in the path have null user objects, the
returned path will contain nulls.
|
insert | public void insert(MutableTreeNode newChild, int childIndex)(Code) | | Removes newChild from its present parent (if it has a
parent), sets the child's parent to this node, and then adds the child
to this node's child array at index childIndex .
newChild must not be null and must not be an ancestor of
this node.
Parameters: newChild - the MutableTreeNode to insert under this node Parameters: childIndex - the index in this node's child arraywhere this node is to be inserted exception: ArrayIndexOutOfBoundsException - ifchildIndex is out of bounds exception: IllegalArgumentException - ifnewChild is null or is anancestor of this node exception: IllegalStateException - if this node does not allowchildren See Also: DefaultMutableTreeNode.isNodeDescendant |
isLeaf | public boolean isLeaf()(Code) | | Returns true if this node has no children. To distinguish between
nodes that have no children and nodes that cannot have
children (e.g. to distinguish files from empty directories), use this
method in conjunction with getAllowsChildren
See Also: DefaultMutableTreeNode.getAllowsChildren true if this node has no children |
isNodeAncestor | public boolean isNodeAncestor(TreeNode anotherNode)(Code) | | Returns true if anotherNode is an ancestor of this node
-- if it is this node, this node's parent, or an ancestor of this
node's parent. (Note that a node is considered an ancestor of itself.)
If anotherNode is null, this method returns false. This
operation is at worst O(h) where h is the distance from the root to
this node.
See Also: DefaultMutableTreeNode.isNodeDescendant See Also: DefaultMutableTreeNode.getSharedAncestor Parameters: anotherNode - node to test as an ancestor of this node true if this node is a descendant of anotherNode |
isNodeChild | public boolean isNodeChild(TreeNode aNode)(Code) | | Returns true if aNode is a child of this node. If
aNode is null, this method returns false.
true if aNode is a child of this node; false if aNode is null |
isNodeDescendant | public boolean isNodeDescendant(DefaultMutableTreeNode anotherNode)(Code) | | Returns true if anotherNode is a descendant of this node
-- if it is this node, one of this node's children, or a descendant of
one of this node's children. Note that a node is considered a
descendant of itself. If anotherNode is null, returns
false. This operation is at worst O(h) where h is the distance from the
root to anotherNode .
See Also: DefaultMutableTreeNode.isNodeAncestor See Also: DefaultMutableTreeNode.getSharedAncestor Parameters: anotherNode - node to test as descendant of this node true if this node is an ancestor of anotherNode |
isNodeSibling | public boolean isNodeSibling(TreeNode anotherNode)(Code) | | Returns true if anotherNode is a sibling of (has the
same parent as) this node. A node is its own sibling. If
anotherNode is null, returns false.
Parameters: anotherNode - node to test as sibling of this node true if anotherNode is a sibling of this node |
isRoot | public boolean isRoot()(Code) | | Returns true if this node is the root of the tree. The root is
the only node in the tree with a null parent; every tree has exactly
one root.
true if this node is the root of its tree |
pathFromAncestorEnumeration | public Enumeration pathFromAncestorEnumeration(TreeNode ancestor)(Code) | | Creates and returns an enumeration that follows the path from
ancestor to this node. The enumeration's
nextElement() method first returns ancestor ,
then the child of ancestor that is an ancestor of this
node, and so on, and finally returns this node. Creation of the
enumeration is O(m) where m is the number of nodes between this node
and ancestor , inclusive. Each nextElement()
message is O(1).
Modifying the tree by inserting, removing, or moving a node invalidates
any enumerations created before the modification.
See Also: DefaultMutableTreeNode.isNodeAncestor See Also: DefaultMutableTreeNode.isNodeDescendant exception: IllegalArgumentException - if ancestor isnot an ancestor of this node an enumeration for following the path from an ancestor ofthis node to this one |
postorderEnumeration | public Enumeration postorderEnumeration()(Code) | | Creates and returns an enumeration that traverses the subtree rooted at
this node in postorder. The first node returned by the enumeration's
nextElement() method is the leftmost leaf. This is the
same as a depth-first traversal.
Modifying the tree by inserting, removing, or moving a node invalidates
any enumerations created before the modification.
See Also: DefaultMutableTreeNode.depthFirstEnumeration See Also: DefaultMutableTreeNode.preorderEnumeration an enumeration for traversing the tree in postorder |
preorderEnumeration | public Enumeration preorderEnumeration()(Code) | | Creates and returns an enumeration that traverses the subtree rooted at
this node in preorder. The first node returned by the enumeration's
nextElement() method is this node.
Modifying the tree by inserting, removing, or moving a node invalidates
any enumerations created before the modification.
See Also: DefaultMutableTreeNode.postorderEnumeration an enumeration for traversing the tree in preorder |
remove | public void remove(int childIndex)(Code) | | Removes the child at the specified index from this node's children
and sets that node's parent to null. The child node to remove
must be a MutableTreeNode .
Parameters: childIndex - the index in this node's child arrayof the child to remove exception: ArrayIndexOutOfBoundsException - ifchildIndex is out of bounds |
remove | public void remove(MutableTreeNode aChild)(Code) | | Removes aChild from this node's child array, giving it a
null parent.
Parameters: aChild - a child of this node to remove exception: IllegalArgumentException - if aChild is null or is not a child of this node |
removeAllChildren | public void removeAllChildren()(Code) | | Removes all of this node's children, setting their parents to null.
If this node has no children, this method does nothing.
|
removeFromParent | public void removeFromParent()(Code) | | Removes the subtree rooted at this node from the tree, giving this
node a null parent. Does nothing if this node is the root of its
tree.
|
setAllowsChildren | public void setAllowsChildren(boolean allows)(Code) | | Determines whether or not this node is allowed to have children.
If allows is false, all of this node's children are
removed.
Note: By default, a node allows children.
Parameters: allows - true if this node is allowed to have children |
setParent | public void setParent(MutableTreeNode newParent)(Code) | | Sets this node's parent to newParent but does not
change the parent's child array. This method is called from
insert() and remove() to
reassign a child's parent, it should not be messaged from anywhere
else.
Parameters: newParent - this node's new parent |
|
|
|