class org.aswing.tree.DefaultMutableTreeNode
Interfaces | |||
MutableTreeNode |
|
Sub classes | ||||
FHTreeStateNode |
|
A DefaultMutableTreeNode
is a general-purpose node in a tree data
structure.
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.
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.
Author paling
Instance Fields
function new(?userObject:Dynamic = null, ?allowsChildren:Bool = true): Void
Creates a tree node with no parent, no children, initialized with the specified user object, and that allows children only if specified.
userObject | an Object provided by the user that constitutes the node's data |
allowsChildren | (optional)if true, the node is allowed to have child nodes -- otherwise, it is always a leaf node. Default is true. |
function append(newChild:MutableTreeNode): Void
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.
See DefaultMiutableTreeNode.insert()
newChild | node to add as a child of this node |
function breadthFirstEnumeration(): Array<Dynamic>
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 DefaultMiutableTreeNode.depthFirstEnumeration()
returns | an enumeration for traversing the tree in breadth-first order |
function children(): Array<Dynamic>
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.
returns | an Enumeration of this node's children |
function depthFirstEnumeration(): Array<Dynamic>
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 DefaultMiutableTreeNode.breadthFirstEnumeration()
See DefaultMiutableTreeNode.postorderEnumeration()
returns | an enumeration for traversing the tree in depth-first order |
function getAllowsChildren(): Bool
Returns true if this node is allowed to have children.
returns | true if this node allows children, else false |
function getChildAfter(aChild:TreeNode): TreeNode
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 DefaultMiutableTreeNode.children()
returns | the child of this node that immediately follows
|
function getChildAt(index:Int): TreeNode
Returns the child at the specified index in this node's child array.
index | an index into this node's child array |
returns | the TreeNode in this node's child array at the specified index |
function getChildBefore(aChild:TreeNode): TreeNode
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.
returns | the child of this node that immediately precedes
|
function getChildCount(): Int
Returns the number of children of this node.
returns | an int giving the number of children of this node |
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 DefaultMiutableTreeNode.getLevel
returns | the depth of the tree whose root is this node |
function getFirstChild(): TreeNode
Returns this node's first child.
returns | the first child of this node, null if this node has no children |
function getFirstLeaf(): DefaultMutableTreeNode
Finds and returns the first leaf that is a descendant of this node -- either this node or its first child's first leaf. Returns this node if it is a leaf.
See DefaultMiutableTreeNode.isLeaf()
See DefaultMiutableTreeNode.isNodeDescendant()
returns | the first leaf in the subtree rooted at this node |
function getIndex(aChild:TreeNode): Int
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.
aChild | the TreeNode to search for among this node's children |
returns | an int giving the index of the node in this node's child
array, or |
function getLastChild(): TreeNode
Returns this node's last child.
returns | the last child of this node, null if this node has no children |
function getLastLeaf(): DefaultMutableTreeNode
Finds and returns the last leaf that is a descendant of this node -- either this node or its last child's last leaf. Returns this node if it is a leaf.
See DefaultMiutableTreeNode.isLeaf()
See DefaultMiutableTreeNode.isNodeDescendant()
returns | the last leaf in the subtree rooted at this node |
function getLeafCount(): Int
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 DefaultMiutableTreeNode.isNodeAncestor()
returns | the number of leaves beneath this node |
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 DefaultMiutableTreeNode.getDepth
returns | the number of levels above this node |
function getNextLeaf(): DefaultMutableTreeNode
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 DefaultMiutableTreeNode.depthFirstEnumeration()
See DefaultMiutableTreeNode.isLeaf()
returns | returns the next leaf past this node |
function getNextNode(): DefaultMutableTreeNode
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 DefaultMiutableTreeNode.preorderEnumeration
returns | the node that follows this node in a preorder traversal, or null if this node is last |
function getNextSibling(): DefaultMutableTreeNode
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 DefaultMiutableTreeNode.children
returns | the sibling of this node that immediately follows this node |
function getPath(): Array<Dynamic>
Returns the path from the root, to get to this node. The last element in the path is this node.
returns | an array of |
function getPreviousLeaf(): DefaultMutableTreeNode
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 DefaultMiutableTreeNode.depthFirstEnumeration()
See DefaultMiutableTreeNode.isLeaf()
returns | returns the leaf before this node |
function getPreviousNode(): DefaultMutableTreeNode
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 DefaultMiutableTreeNode.preorderEnumeration
returns | the node that precedes this node in a preorder traversal, or null if this node is the first |
function getPreviousSibling(): DefaultMutableTreeNode
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.
returns | the sibling of this node that immediately precedes this node |
Returns the root of the tree that contains this node. The root is the ancestor with a null parent.
@see DefaultMiutableTreeNode.isNodeAncestor
returns | the root of the tree that contains this node |
function getSharedAncestor(aNode:DefaultMutableTreeNode): TreeNode
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. A node is considered an ancestor of itself.
@see DefaultMiutableTreeNode.isNodeAncestor @see DefaultMiutableTreeNode.isNodeDescendant
aNode | node to find common ancestor with |
returns | nearest ancestor common to this node and |
function getSiblingCount(): Int
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
).
returns | the number of siblings of this node |
function getUserObjectPath(): Array<Dynamic>
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.
function insert(newChild:MutableTreeNode, childIndex:Int): Void
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.
@see DefaultMiutableTreeNode.isNodeDescendant
newChild | the MutableTreeNode to insert under this node |
childIndex | the index in this node's child array where this node is to be inserted |
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 DefaultMiutableTreeNode.getAllowsChildren()
returns | true if this node has no children |
function isNodeAncestor(anotherNode:TreeNode): Bool
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 DefaultMiutableTreeNode.isNodeDescendant()
See DefaultMiutableTreeNode.getSharedAncestor()
anotherNode | node to test as an ancestor of this node |
returns | true if this node is a descendant of |
function isNodeChild(aNode:TreeNode): Bool
Returns true if aNode
is a child of this node. If
aNode
is null, this method returns false.
returns | true if |
function isNodeDescendant(anotherNode:DefaultMutableTreeNode): Bool
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 DefaultMiutableTreeNode.isNodeAncestor @see DefaultMiutableTreeNode.getSharedAncestor
anotherNode | node to test as descendant of this node |
returns | true if this node is an ancestor of |
function isNodeRelated(aNode:DefaultMutableTreeNode): Bool
Returns true if and only if aNode
is in the same tree
as this node. Returns false if aNode
is null.
@see DefaultMiutableTreeNode.getSharedAncestor @see DefaultMiutableTreeNode.getRoot
returns | true if |
function isNodeSibling(anotherNode:TreeNode): Bool
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.
anotherNode | node to test as sibling of this node |
returns | true if |
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.
returns | true if this node is the root of its tree |
function pathFromAncestorEnumeration(ancestor:TreeNode): Array<Dynamic>
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 DefaultMiutableTreeNode.isNodeAncestor()
See DefaultMiutableTreeNode.isNodeDescendant()
returns | an enumeration for following the path from an ancestor of this node to this one |
function postorderEnumeration(): Array<Dynamic>
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 DefaultMiutableTreeNode.depthFirstEnumeration()
See DefaultMiutableTreeNode.preorderEnumeration()
returns | an enumeration for traversing the tree in postorder |
function preorderEnumeration(): Array<Dynamic>
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 DefaultMiutableTreeNode.postorderEnumeration()
returns | an enumeration for traversing the tree in preorder |
function remove(aChild:MutableTreeNode): Void
Removes aChild
from this node's child array, giving it a
null parent.
aChild | a child of this node to remove |
function removeAllChildren(): Void
Removes all of this node's children, setting their parents to null. If this node has no children, this method does nothing.
function removeAt(childIndex:Int): Void
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
.
childIndex | the index in this node's child array
of the child to remove, nothing happen if
|
function removeFromParent(): Void
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.
function setAllowsChildren(allows:Bool): Void
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.
allows | true if this node is allowed to have children |