|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Object![]()
![]()
![]()
javax.swing.tree.DefaultMutableTreeNode
, Cloneable
, MutableTreeNode
, TreeNode


public class DefaultMutableTreeNode

, MutableTreeNode
, Serializable

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 XMLEncoder
.
MutableTreeNode
,
Serialized Form| Field Summary | |
|---|---|
protected boolean |
allowsChildren
true if the node is able to have children |
protected Vector |
children
array of children, may be null if this node has no children |
static Enumeration |
EMPTY_ENUMERATION
An enumeration that is always empty. |
protected MutableTreeNode |
parent
this node's parent, or null if this node has no parent |
protected Object |
userObject
optional user object |
| Constructor Summary | |
|---|---|
DefaultMutableTreeNode
Creates a tree node that has no parent and no children, but which allows children. |
|
DefaultMutableTreeNode
Creates a tree node with no parent, no children, but which allows children, and initializes it with the specified user object. |
|
DefaultMutableTreeNode
Creates a tree node with no parent, no children, initialized with the specified user object, and that allows children only if specified. |
|
| Method Summary | |
|---|---|
void |
add
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. |
Enumeration |
breadthFirstEnumeration
Creates and returns an enumeration that traverses the subtree rooted at this node in breadth-first order. |
Enumeration |
children
Creates and returns a forward-order enumeration of this node's children. |
Object |
clone
Overridden to make clone public. |
Enumeration |
depthFirstEnumeration
Creates and returns an enumeration that traverses the subtree rooted at this node in depth-first order. |
boolean |
getAllowsChildren
Returns true if this node is allowed to have children. |
TreeNode |
getChildAfter
Returns the child in this node's child array that immediately follows aChild, which must be a child of this node. |
TreeNode |
getChildAt
Returns the child at the specified index in this node's child array. |
TreeNode |
getChildBefore
Returns the child in this node's child array that immediately precedes aChild, which must be a child of this node. |
int |
getChildCount
Returns the number of children of this node. |
int |
getDepth
Returns the depth of the tree rooted at this node -- the longest distance from this node to a leaf. |
TreeNode |
getFirstChild
Returns this node's first child. |
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. |
int |
getIndex
Returns the index of the specified child in this node's child array. |
TreeNode |
getLastChild
Returns this node's last child. |
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. |
int |
getLeafCount
Returns the total number of leaves that are descendants of this node. |
int |
getLevel
Returns the number of levels above this node -- the distance from the root to this node. |
DefaultMutableTreeNode |
getNextLeaf
Returns the leaf after this node or null if this node is the last leaf in the tree. |
DefaultMutableTreeNode |
getNextNode
Returns the node that follows this node in a preorder traversal of this node's tree. |
DefaultMutableTreeNode |
getNextSibling
Returns the next sibling of this node in the parent's children array. |
TreeNode |
getParent
Returns this node's parent or null if this node has no parent. |
TreeNode |
getPath
Returns the path from the root, to get to this node. |
protected TreeNode |
getPathToRoot
Builds the parents of node up to and including the root node, where the original node is the last element in the returned array. |
DefaultMutableTreeNode |
getPreviousLeaf
Returns the leaf before this node or null if this node is the first leaf in the tree. |
DefaultMutableTreeNode |
getPreviousNode
Returns the node that precedes this node in a preorder traversal of this node's tree. |
DefaultMutableTreeNode |
getPreviousSibling
Returns the previous sibling of this node in the parent's children array. |
TreeNode |
getRoot
Returns the root of the tree that contains this node. |
TreeNode |
getSharedAncestor
Returns the nearest common ancestor to this node and aNode. |
int |
getSiblingCount
Returns the number of siblings of this node. |
Object |
getUserObject
Returns this node's user object. |
Object |
getUserObjectPath
Returns the user object path, from the root, to get to this node. |
void |
insert
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. |
boolean |
isLeaf
Returns true if this node has no children. |
boolean |
isNodeAncestor
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. |
boolean |
isNodeChild
Returns true if aNode is a child of this node. |
boolean |
isNodeDescendant
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. |
boolean |
isNodeRelated
Returns true if and only if aNode is in the same tree
as this node. |
boolean |
isNodeSibling
Returns true if anotherNode is a sibling of (has the
same parent as) this node. |
boolean |
isRoot
Returns true if this node is the root of the tree. |
Enumeration |
pathFromAncestorEnumeration
Creates and returns an enumeration that follows the path from ancestor to this node. |
Enumeration |
postorderEnumeration
Creates and returns an enumeration that traverses the subtree rooted at this node in postorder. |
Enumeration |
preorderEnumeration
Creates and returns an enumeration that traverses the subtree rooted at this node in preorder. |
void |
remove
Removes the child at the specified index from this node's children and sets that node's parent to null. |
void |
remove
Removes aChild from this node's child array, giving it a
null parent. |
void |
removeAllChildren
Removes all of this node's children, setting their parents to null. |
void |
removeFromParent
Removes the subtree rooted at this node from the tree, giving this node a null parent. |
void |
setAllowsChildren
Determines whether or not this node is allowed to have children. |
void |
setParent
Sets this node's parent to newParent but does not
change the parent's child array. |
void |
setUserObject
Sets the user object for this node to userObject. |
String |
toString
Returns the result of sending toString() to this node's
user object, or null if this node has no user object. |
Methods inherited from class java.lang.Object ![]() |
|---|
equals |
| Field Detail |
|---|

public static final Enumeration![]()
![]()
<TreeNode
![]()
![]()
> EMPTY_ENUMERATION

protected MutableTreeNode![]()
![]()
parent

protected Vector![]()
![]()
children

protected transient Object![]()
![]()
userObject

protected boolean allowsChildren
| Constructor Detail |
|---|

public DefaultMutableTreeNode()

public DefaultMutableTreeNode(Object![]()
![]()
userObject)
userObject - an Object provided by the user that constitutes
the node's data

public DefaultMutableTreeNode(Object![]()
![]()
userObject, boolean allowsChildren)
userObject - an Object provided by the user that constitutes
the node's dataallowsChildren - if true, the node is allowed to have child
nodes -- otherwise, it is always a leaf node| Method Detail |
|---|

public void insert(MutableTreeNode![]()
![]()
newChild, int childIndex)
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.
insert

in interface MutableTreeNode

newChild - the MutableTreeNode to insert under this nodechildIndex - the index in this node's child array
where this node is to be inserted
ArrayIndexOutOfBoundsException

- if
childIndex is out of bounds
IllegalArgumentException

- if
newChild is null or is an
ancestor of this node
IllegalStateException

- if this node does not allow
childrenisNodeDescendant(javax.swing.tree.DefaultMutableTreeNode)


public void remove(int childIndex)
MutableTreeNode.
remove

in interface MutableTreeNode

childIndex - the index in this node's child array
of the child to remove
ArrayIndexOutOfBoundsException

- if
childIndex is out of bounds

public void setParent(MutableTreeNode![]()
![]()
newParent)
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.
setParent

in interface MutableTreeNode

newParent - this node's new parent

public TreeNode![]()
![]()
getParent()
getParent

in interface TreeNode


public TreeNode![]()
![]()
getChildAt(int index)
getChildAt

in interface TreeNode

index - an index into this node's child array
ArrayIndexOutOfBoundsException

- if index
is out of bounds

public int getChildCount()
getChildCount

in interface TreeNode


public int getIndex(TreeNode![]()
![]()
aChild)
-1. This method performs a linear search and is O(n)
where n is the number of children.
getIndex

in interface TreeNode

aChild - the TreeNode to search for among this node's children
-1 if the specified node is a not
a child of this node
IllegalArgumentException

- if aChild
is null

public Enumeration![]()
![]()
children()
children

in interface TreeNode


public void setAllowsChildren(boolean allows)
allows is false, all of this node's children are
removed.
Note: By default, a node allows children.
allows - true if this node is allowed to have children

public boolean getAllowsChildren()
getAllowsChildren

in interface TreeNode


public void setUserObject(Object![]()
![]()
userObject)
userObject.
setUserObject

in interface MutableTreeNode

userObject - the Object that constitutes this node's
user-specified datagetUserObject()
,
toString()


public Object![]()
![]()
getUserObject()
setUserObject(java.lang.Object)
,
toString()


public void removeFromParent()
removeFromParent

in interface MutableTreeNode


public void remove(MutableTreeNode![]()
![]()
aChild)
aChild from this node's child array, giving it a
null parent.
remove

in interface MutableTreeNode

aChild - a child of this node to remove
IllegalArgumentException

- if aChild
is null or is not a child of this node

public void removeAllChildren()

public void add(MutableTreeNode![]()
![]()
newChild)
newChild from its parent and makes it a child of
this node by adding it to the end of this node's child array.
newChild - node to add as a child of this node
IllegalArgumentException

- if newChild
is null
IllegalStateException

- if this node does not allow
childreninsert(javax.swing.tree.MutableTreeNode, int)


public boolean isNodeAncestor(TreeNode![]()
![]()
anotherNode)
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.
anotherNode - node to test as an ancestor of this node
anotherNodeisNodeDescendant(javax.swing.tree.DefaultMutableTreeNode)
,
getSharedAncestor(javax.swing.tree.DefaultMutableTreeNode)


public boolean isNodeDescendant(DefaultMutableTreeNode![]()
![]()
anotherNode)
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.
anotherNode - node to test as descendant of this node
anotherNodeisNodeAncestor(javax.swing.tree.TreeNode)
,
getSharedAncestor(javax.swing.tree.DefaultMutableTreeNode)


public TreeNode![]()
![]()
getSharedAncestor(DefaultMutableTreeNode
![]()
![]()
aNode)
aNode.
Returns null, if no such ancestor exists -- if this node and
aNode are in different trees or if aNode is
null. A node is considered an ancestor of itself.
aNode - node to find common ancestor with
aNode,
or null if noneisNodeAncestor(javax.swing.tree.TreeNode)
,
isNodeDescendant(javax.swing.tree.DefaultMutableTreeNode)


public boolean isNodeRelated(DefaultMutableTreeNode![]()
![]()
aNode)
aNode is in the same tree
as this node. Returns false if aNode is null.
aNode is in the same tree as this node;
false if aNode is nullgetSharedAncestor(javax.swing.tree.DefaultMutableTreeNode)
,
getRoot()


public int getDepth()
getLevel() because it must effectively traverse the entire
tree rooted at this node.
getLevel()


public int getLevel()
getDepth()


public TreeNode![]()
![]()
[] getPath()

protected TreeNode![]()
![]()
[] getPathToRoot(TreeNode
![]()
![]()
aNode, int depth)
aNode - the TreeNode to get the path fordepth - an int giving the number of steps already taken towards
the root (on recursive calls), used to size the returned array

public Object![]()
![]()
[] getUserObjectPath()

public TreeNode![]()
![]()
getRoot()
isNodeAncestor(javax.swing.tree.TreeNode)


public boolean isRoot()

public DefaultMutableTreeNode![]()
![]()
getNextNode()
preorderEnumeration()


public DefaultMutableTreeNode![]()
![]()
getPreviousNode()
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.
preorderEnumeration()


public Enumeration![]()
![]()
preorderEnumeration()
nextElement() method is this node.Modifying the tree by inserting, removing, or moving a node invalidates any enumerations created before the modification.
postorderEnumeration()


public Enumeration![]()
![]()
postorderEnumeration()
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.
depthFirstEnumeration()
,
preorderEnumeration()


public Enumeration![]()
![]()
breadthFirstEnumeration()
nextElement() method is this node.Modifying the tree by inserting, removing, or moving a node invalidates any enumerations created before the modification.
depthFirstEnumeration()


public Enumeration![]()
![]()
depthFirstEnumeration()
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.
breadthFirstEnumeration()
,
postorderEnumeration()


public Enumeration![]()
![]()
pathFromAncestorEnumeration(TreeNode
![]()
![]()
ancestor)
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.
IllegalArgumentException

- if ancestor is
not an ancestor of this nodeisNodeAncestor(javax.swing.tree.TreeNode)
,
isNodeDescendant(javax.swing.tree.DefaultMutableTreeNode)


public boolean isNodeChild(TreeNode![]()
![]()
aNode)
aNode is a child of this node. If
aNode is null, this method returns false.
aNode is a child of this node; false if
aNode is null

public TreeNode![]()
![]()
getFirstChild()
NoSuchElementException

- if this node has no children

public TreeNode![]()
![]()
getLastChild()
NoSuchElementException

- if this node has no children

public TreeNode![]()
![]()
getChildAfter(TreeNode
![]()
![]()
aChild)
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.
aChild
IllegalArgumentException

- if aChild is
null or is not a child of this nodechildren


public TreeNode![]()
![]()
getChildBefore(TreeNode
![]()
![]()
aChild)
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.
aChild
IllegalArgumentException

- if aChild is null
or is not a child of this node

public boolean isNodeSibling(TreeNode![]()
![]()
anotherNode)
anotherNode is a sibling of (has the
same parent as) this node. A node is its own sibling. If
anotherNode is null, returns false.
anotherNode - node to test as sibling of this node
anotherNode is a sibling of this node

public int getSiblingCount()
1).

public DefaultMutableTreeNode![]()
![]()
getNextSibling()
children


public DefaultMutableTreeNode![]()
![]()
getPreviousSibling()

public boolean isLeaf()
getAllowsChildren
isLeaf

in interface TreeNode

getAllowsChildren()


public DefaultMutableTreeNode![]()
![]()
getFirstLeaf()
isLeaf()
,
isNodeDescendant(javax.swing.tree.DefaultMutableTreeNode)


public DefaultMutableTreeNode![]()
![]()
getLastLeaf()
isLeaf()
,
isNodeDescendant(javax.swing.tree.DefaultMutableTreeNode)


public DefaultMutableTreeNode![]()
![]()
getNextLeaf()
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.
depthFirstEnumeration()
,
isLeaf()


public DefaultMutableTreeNode![]()
![]()
getPreviousLeaf()
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.
depthFirstEnumeration()
,
isLeaf()


public int getLeafCount()
1. This method is O(n)
where n is the number of descendants of this node.
isNodeAncestor(javax.swing.tree.TreeNode)


public String![]()
![]()
toString()
toString() to this node's
user object, or null if this node has no user object.
toString

in class Object

getUserObject()


public Object![]()
![]()
clone()
clone

in class Object

Cloneable

|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||