class org.aswing.tree.DefaultMutableTreeNode

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

var content:Dynamic

optional user object

var parent:MutableTreeNode

this node's parent, or null if this node has no parent

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 getAwmlIndex(): Int

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 aChild

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 aChild

function getChildCount(): Int

Returns the number of children of this node.

returns

an int giving the number of children of this node

function getDepth(): Int

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 -1 if the specified node is a not a child of this node

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

function getLevel(): Int

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 TreeNode objects giving the path, where the first element in the path is the root and the last element is this node.

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

function getRoot(): TreeNode

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 aNode, or null if none

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

function isLeaf(): Bool

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 anotherNode

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 aNode is a child of this node; false if aNode is null

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 anotherNode

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 aNode is in the same tree as this node; false if aNode is null

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 anotherNode is a sibling of this node

function isRoot(): Bool

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 childIndex is out of bounds

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

function toString(): String

Returns the result of sending toString() to this node's user object, or null if this node has no user object.

See DefaultMiutableTreeNode.getUserObject()