public class DefaultMutableTreeNode extends Object implements Cloneable, MutableTreeNode, Serializable
DefaultMutableTreeNode
在树的数据结构的通用节点。对于使用默认的树节点的例子,看到在java教程
How to Use Trees。
一个树节点可以有至多一个父节点和0个或更多的孩子。DefaultMutableTreeNode
审查和修改节点的父节点和孩子同时操作检查树节点的一部分提供的操作。一个节点的树是由开始在节点上,并遵循所有可能的链接到父母和孩子可以达到的所有节点的集合。没有父节点的节点是它的树的根;没有孩子的节点是一个叶子。一棵树可能包含许多子树,每个节点作为自己的子树的根。
这个类提供了有效地遍历枚举树或子树各订单或以下两个节点之间的路径。一个DefaultMutableTreeNode
也可以持有引用用户对象,这是留给用户。问DefaultMutableTreeNode
与toString()
其字符串表示形式返回用户对象的字符串表示形式。
这不是一个线程安全类。if你打算使用defaultmutabletreenode(或一棵树的treenodes)在一个多线程,你需要做你自己的同步。采用的一个很好的约定是在一棵树的根节点上同步。
而defaultmutabletreenode实现MutableTreeNode接口,将允许你添加任何实施MutableTreeNode并不是所有的方法在DefaultMutableTreeNode将适用于所有MutableTreeNodes的实现。尤其是其所提供的枚举,使用这些方法的一些假设defaultmutabletreenode只包含defaultmutablenode实例。所有的树/ mutabletreenode方法将表现为定义无论怎样实现增值。
警告:序列化该类的对象与以后的Swing版本不兼容。当前的序列化支持适用于短期贮藏或RMI运行相同Swing版本的应用程序之间。为1.4,为所有JavaBeans™长期存储的支持已被添加到java.beans
包。请看XMLEncoder
。
MutableTreeNode
Modifier and Type | Field and Description |
---|---|
protected boolean |
allowsChildren
如果节点能够有孩子
|
protected Vector |
children
数组的子数组,如果这个节点没有子节点,则可能为空
|
static Enumeration<TreeNode> |
EMPTY_ENUMERATION
总是空的枚举。
|
protected MutableTreeNode |
parent
这个节点的父节点,或者如果这个节点没有父节点,则为空
|
protected Object |
userObject
可选的用户对象
|
Constructor and Description |
---|
DefaultMutableTreeNode()
创建一个没有父节点和没有子节点的树节点,但允许孩子们。
|
DefaultMutableTreeNode(Object userObject)
创建一个没有父母,没有孩子的树节点,但它允许儿童,并初始化它与指定的用户对象。
|
DefaultMutableTreeNode(Object userObject, boolean allowsChildren)
创建一个没有父节点的树节点,没有孩子,用指定的用户对象初始化,并且允许孩子在指定的。
|
Modifier and Type | Method and Description |
---|---|
void |
add(MutableTreeNode newChild)
除去其母
newChild 使它添加到该节点的子数组的结束这个节点的子节点。
|
Enumeration |
breadthFirstEnumeration()
创建并返回一个遍历子树扎根在这个节点广度优先顺序枚举。
|
Enumeration |
children()
创建并返回此节点的儿童的前向顺序枚举。
|
Object |
clone()
重写以使克隆公共。
|
Enumeration |
depthFirstEnumeration()
创建并返回一个遍历子树扎根在这个节点深度优先顺序枚举。
|
boolean |
getAllowsChildren()
如果允许这个节点有孩子,则返回真。
|
TreeNode |
getChildAfter(TreeNode aChild)
返回的孩子在这个节点的子阵列,紧跟
aChild ,必须为这个节点的子节点。
|
TreeNode |
getChildAt(int index)
在这个节点的子数组中返回指定的索引处的子节点。
|
TreeNode |
getChildBefore(TreeNode aChild)
返回的孩子在这个节点的子阵列
aChild 之前,必须为该节点的孩子。
|
int |
getChildCount()
返回此节点的子数。
|
int |
getDepth()
返回在这个节点上的树的深度-从这个节点到一个叶的最长的距离。
|
TreeNode |
getFirstChild()
返回这个节点的第一个孩子。
|
DefaultMutableTreeNode |
getFirstLeaf()
查找并返回此节点的子节点的第一个叶子--或者这个节点或它的第一个孩子的第一个叶子。
|
int |
getIndex(TreeNode aChild)
返回在这个节点的子数组中指定的子数组的索引。
|
TreeNode |
getLastChild()
返回这个节点的最后一个孩子。
|
DefaultMutableTreeNode |
getLastLeaf()
查找并返回此节点的最后一页的最后一页--无论是这个节点还是它最后一个子页的最后一页。
|
int |
getLeafCount()
返回此节点的子节点的总数。
|
int |
getLevel()
返回此节点上的级别的数目-从根到该节点的距离。
|
DefaultMutableTreeNode |
getNextLeaf()
返回此节点或空后的叶,如果这个节点是树中的最后一片叶子。
|
DefaultMutableTreeNode |
getNextNode()
返回节点如下这个节点在这个节点的树的先序遍历。
|
DefaultMutableTreeNode |
getNextSibling()
返回父节点数组中这个节点的下一个兄弟姐妹。
|
TreeNode |
getParent()
返回此节点的父节点或空节点,如果这个节点没有父节点。
|
TreeNode[] |
getPath()
返回从根的路径,到这个节点。
|
protected TreeNode[] |
getPathToRoot(TreeNode aNode, int depth)
建立节点到和包括根节点的节点,其中原始节点是返回数组中的最后一个元素。
|
DefaultMutableTreeNode |
getPreviousLeaf()
返回此节点或空之前的叶,如果这个节点是树中的第一个叶子。
|
DefaultMutableTreeNode |
getPreviousNode()
返回之前,这个节点在这个节点的树的先序遍历的节点。
|
DefaultMutableTreeNode |
getPreviousSibling()
返回父节点数组中此节点的前一个兄弟姐妹。
|
TreeNode |
getRoot()
返回包含此节点的树的根。
|
TreeNode |
getSharedAncestor(DefaultMutableTreeNode aNode)
返回最近的共同祖先这个节点和
aNode 。
|
int |
getSiblingCount()
返回这个节点的兄弟姐妹的数量。
|
Object |
getUserObject()
返回此节点的用户对象。
|
Object[] |
getUserObjectPath()
返回用户对象路径,从根,到这个节点。
|
void |
insert(MutableTreeNode newChild, int childIndex)
从目前
newChild 母删除(如果它有一个家长),设置该节点的孩子的父母,然后将孩子这个节点的子数组索引
childIndex 。
|
boolean |
isLeaf()
如果这个节点没有子节点,则返回真。
|
boolean |
isNodeAncestor(TreeNode anotherNode)
如果
anotherNode 是该节点的祖先--如果是这个节点返回true,该节点的父节点,或者一个祖先的这个节点的父。
|
boolean |
isNodeChild(TreeNode aNode)
如果
aNode 是这个节点的子节点返回true。
|
boolean |
isNodeDescendant(DefaultMutableTreeNode anotherNode)
如果
anotherNode 是此节点的后代——如果这个节点返回true,这一节点的子孙,或子孙一本节点的子节点。
|
boolean |
isNodeRelated(DefaultMutableTreeNode aNode)
如果
aNode 是同一棵树作为这个节点返回true。
|
boolean |
isNodeSibling(TreeNode anotherNode)
如果
anotherNode 是兄弟返回true(具有相同的父节点)。
|
boolean |
isRoot()
如果这个节点是树的根,则返回真。
|
Enumeration |
pathFromAncestorEnumeration(TreeNode ancestor)
创建并返回一个枚举,如下的路径从
ancestor 这个节点。
|
Enumeration |
postorderEnumeration()
创建并返回一个遍历子树扎根在这个节点在后序枚举。
|
Enumeration |
preorderEnumeration()
创建并返回一个遍历子树扎根在这个节点中序遍历枚举。
|
void |
remove(int childIndex)
从这个节点的子节点中移除指定的索引处的子节点,并将该节点的父。
|
void |
remove(MutableTreeNode aChild)
删除这个节点的子阵列
aChild ,给它一个空母。
|
void |
removeAllChildren()
移除这个节点的所有的孩子,将他们的父母设置为零。
|
void |
removeFromParent()
删除子树扎根在这个节点的树,给这个节点空母。
|
void |
setAllowsChildren(boolean allows)
确定此节点是否允许有孩子。
|
void |
setParent(MutableTreeNode newParent)
设置该节点的父
newParent 但不改变父母的子阵列。
|
void |
setUserObject(Object userObject)
设置此节点
userObject 用户对象。
|
String |
toString()
返回发送
toString() 这个节点的用户对象的结果,或空字符串,如果该节点没有用户对象。
|
public static final Enumeration<TreeNode> EMPTY_ENUMERATION
protected MutableTreeNode parent
protected Vector children
protected transient Object userObject
protected boolean allowsChildren
public DefaultMutableTreeNode()
public DefaultMutableTreeNode(Object userObject)
userObject
-构成节点的数据用户提供的一个对象
public DefaultMutableTreeNode(Object userObject, boolean allowsChildren)
userObject
-构成节点的数据用户提供的一个对象
allowsChildren
-如果属实,允许节点有子节点,否则,它始终是一个叶节点
public void insert(MutableTreeNode newChild, int childIndex)
newChild
母删除(如果它有一个家长),设置该节点的孩子的父母,然后将孩子这个节点的子数组索引
childIndex
。
newChild
不得空,不得此节点的祖先。
insert
接口
MutableTreeNode
newChild
- mutabletreenode插入节点下
childIndex
-在这个节点的子阵列,插入节点的索引
ArrayIndexOutOfBoundsException
-如果
childIndex
出界
IllegalArgumentException
-如果
newChild
是空的或是该节点的祖先
IllegalStateException
-如果这个节点不允许孩子
isNodeDescendant(javax.swing.tree.DefaultMutableTreeNode)
public void remove(int childIndex)
MutableTreeNode
。
remove
接口
MutableTreeNode
childIndex
-在这个节点的子阵列的孩子删除索引
ArrayIndexOutOfBoundsException
-如果
childIndex
出界
public void setParent(MutableTreeNode newParent)
newParent
但不改变父母的子阵列。这种方法是从
insert()
和
remove()
被指派一个孩子的父母,不应该在其他地方。
setParent
接口
MutableTreeNode
newParent
这个节点的新的父
public TreeNode getParent()
public TreeNode getChildAt(int index)
getChildAt
接口
TreeNode
index
进入这个节点的子数组索引
ArrayIndexOutOfBoundsException
-如果
index
出界
public int getChildCount()
getChildCount
接口
TreeNode
public int getIndex(TreeNode aChild)
-1
。这种方法进行一个线性搜索,是O(n),其中n是儿童的数量。
getIndex
接口
TreeNode
aChild
-树节点查找该节点的儿童
-1
如果指定的节点是不是一个孩子,这个节点
IllegalArgumentException
-如果
aChild
是空的
public Enumeration children()
public void setAllowsChildren(boolean allows)
allows
是虚假的,这些节点的子节点被删除。
注:默认情况下,一个节点允许孩子。
allows
-如果这个节点是允许有孩子
public boolean getAllowsChildren()
getAllowsChildren
接口
TreeNode
public void setUserObject(Object userObject)
userObject
用户对象。
setUserObject
接口
MutableTreeNode
userObject
-构成该节点的用户指定的数据对象
getUserObject()
,
toString()
public Object getUserObject()
setUserObject(java.lang.Object)
,
toString()
public void removeFromParent()
removeFromParent
接口
MutableTreeNode
public void remove(MutableTreeNode aChild)
aChild
,给它一个空母。
remove
接口
MutableTreeNode
aChild
-这个节点的子节点删除
IllegalArgumentException
-如果
aChild
为空或不是此节点的子
public void removeAllChildren()
public void add(MutableTreeNode newChild)
newChild
使它添加到该节点的子数组的结束这个节点的子节点。
newChild
节点添加为该节点的子节点
IllegalArgumentException
-如果
newChild
是空的
IllegalStateException
-如果这个节点不允许孩子
insert(javax.swing.tree.MutableTreeNode, int)
public boolean isNodeAncestor(TreeNode anotherNode)
anotherNode
是该节点的祖先--如果是这个节点返回true,该节点的父节点,或者一个祖先的这个节点的父。(注意,一个节点是本身。一个祖先)如果
anotherNode
是无效的,该方法返回false。此操作是在最坏的O(H),其中H是从根到这个节点的距离。
anotherNode
节点测试作为该节点的祖先
anotherNode
后裔
isNodeDescendant(javax.swing.tree.DefaultMutableTreeNode)
,
getSharedAncestor(javax.swing.tree.DefaultMutableTreeNode)
public boolean isNodeDescendant(DefaultMutableTreeNode anotherNode)
anotherNode
是此节点的后代——如果这个节点返回true,这一节点的子孙,或子孙一本节点的子节点。请注意,一个节点被认为是自己的后代。如果
anotherNode
为空,返回false。此操作是在最坏的情况下O(H),H是从根到
anotherNode
距离。
anotherNode
节点测试作为该节点的后代
anotherNode
祖先
isNodeAncestor(javax.swing.tree.TreeNode)
,
getSharedAncestor(javax.swing.tree.DefaultMutableTreeNode)
public TreeNode getSharedAncestor(DefaultMutableTreeNode aNode)
aNode
。返回null,如果没有这样的祖先存在--如果这个节点和
aNode
在不同的树木或者
aNode
是空的。一个节点被认为是一个自己的祖先。
aNode
节点找到共同的祖先
aNode
常见的最近的祖先,如果没有返回null
isNodeAncestor(javax.swing.tree.TreeNode)
,
isNodeDescendant(javax.swing.tree.DefaultMutableTreeNode)
public boolean isNodeRelated(DefaultMutableTreeNode aNode)
aNode
是同一棵树作为这个节点返回true。如果
aNode
为空返回false。
aNode
这结真;假如果
aNode
是空的
getSharedAncestor(javax.swing.tree.DefaultMutableTreeNode)
,
getRoot()
public int getDepth()
getLevel()
更昂贵,因为它必须有效地遍历整个树扎根在这个节点。
getLevel()
public int getLevel()
getDepth()
public TreeNode[] getPath()
protected TreeNode[] getPathToRoot(TreeNode aNode, int depth)
aNode
-树节点得到的路径
depth
- int给已经迈出的步数(根在递归调用),用来返回数组的大小
public Object[] getUserObjectPath()
public TreeNode getRoot()
isNodeAncestor(javax.swing.tree.TreeNode)
public boolean isRoot()
public DefaultMutableTreeNode getNextNode()
preorderEnumeration()
public DefaultMutableTreeNode getPreviousNode()
null
如果这个节点遍历的第一个节点的树的根。这是遍历整个树的一个低效的方法;使用一个枚举,而不是。
preorderEnumeration()
public Enumeration preorderEnumeration()
nextElement()
节点。
修改树的插入,删除,或移动节点失效之前创建修改任何枚举。
postorderEnumeration()
public Enumeration postorderEnumeration()
nextElement()
方法返回的第一个节点是最左边的叶子。这是相同的深度优先遍历。
修改树的插入,删除,或移动节点失效之前创建修改任何枚举。
depthFirstEnumeration()
,
preorderEnumeration()
public Enumeration breadthFirstEnumeration()
nextElement()
节点。
修改树的插入,删除,或移动节点失效之前创建修改任何枚举。
depthFirstEnumeration()
public Enumeration depthFirstEnumeration()
nextElement()
方法返回的第一个节点是最左边的叶子。这是为后序遍历相同。
修改树的插入,删除,或移动节点失效之前创建修改任何枚举。
breadthFirstEnumeration()
,
postorderEnumeration()
public Enumeration pathFromAncestorEnumeration(TreeNode ancestor)
ancestor
这个节点。枚举的
nextElement()
方法首先返回
ancestor
,然后
ancestor
是这个节点的祖先的孩子,等等,最后返回此节点。枚举的创作是O(M),M是该节点与节点之间的
ancestor
数量,包容。每个
nextElement()
消息是O(1)。
修改树的插入,删除,或移动节点失效之前创建修改任何枚举。
IllegalArgumentException
-如果
ancestor
不是这个节点的祖先
isNodeAncestor(javax.swing.tree.TreeNode)
,
isNodeDescendant(javax.swing.tree.DefaultMutableTreeNode)
public boolean isNodeChild(TreeNode aNode)
aNode
是这个节点的子节点返回true。如果
aNode
是无效的,该方法返回false。
aNode
是这个节点的子真;假如果
aNode
是空的
public TreeNode getFirstChild()
NoSuchElementException
-如果这个节点没有孩子
public TreeNode getLastChild()
NoSuchElementException
-如果这个节点没有孩子
public TreeNode getChildAfter(TreeNode aChild)
aChild
,必须为这个节点的子节点。如果
aChild
是最后的孩子,返回null。此方法执行该节点的孩子
aChild
线性搜索,是O(n),n是儿童的数量;通过对孩子的整个阵列,使用枚举代替。
aChild
IllegalArgumentException
-如果
aChild
为空或不是此节点的子
children
public TreeNode getChildBefore(TreeNode aChild)
aChild
之前,必须为该节点的孩子。如果
aChild
是第一个孩子,返回null。此方法执行该节点的孩子
aChild
线性搜索,是O(n),n是儿童的数量。
aChild
IllegalArgumentException
-如果
aChild
为空或不是此节点的子
public boolean isNodeSibling(TreeNode anotherNode)
anotherNode
是兄弟返回true(具有相同的父节点)。一个节点是它自己的兄弟姐妹。如果
anotherNode
为空,返回false。
anotherNode
节点测试作为该节点的兄弟姐妹
anotherNode
是同级节点
public int getSiblingCount()
1
)。
public DefaultMutableTreeNode getNextSibling()
children
public DefaultMutableTreeNode getPreviousSibling()
public boolean isLeaf()
getAllowsChildren
使用这个方法
isLeaf
接口
TreeNode
getAllowsChildren()
public DefaultMutableTreeNode getFirstLeaf()
isLeaf()
,
isNodeDescendant(javax.swing.tree.DefaultMutableTreeNode)
public DefaultMutableTreeNode getLastLeaf()
isLeaf()
,
isNodeDescendant(javax.swing.tree.DefaultMutableTreeNode)
public DefaultMutableTreeNode getNextLeaf()
在这个实现的MutableNode
界面,这个操作是非常低效的。为了确定下一个节点,该方法首先在父的子列表中执行一个线性搜索,以便找到当前节点。
实现使操作适合短遍历从一个已知的位置。但遍历所有在树上的叶子,你应该使用depthFirstEnumeration
枚举树和使用isLeaf
节点每个节点确定哪些是叶子。
depthFirstEnumeration()
,
isLeaf()
public DefaultMutableTreeNode getPreviousLeaf()
在这个实现的MutableNode
界面,这个操作是非常低效的。为了确定上一个节点,该方法首先在父的子列表中执行一个线性搜索,以便找到当前节点。
实现使操作适合短遍历从一个已知的位置。但遍历所有在树上的叶子,你应该使用depthFirstEnumeration
枚举树和使用isLeaf
节点每个节点确定哪些是叶子。
depthFirstEnumeration()
,
isLeaf()
public int getLeafCount()
1
。这种方法是O(n),其中n是这个节点的后裔数。
isNodeAncestor(javax.swing.tree.TreeNode)
public String toString()
toString()
这个节点的用户对象的结果,或空字符串,如果该节点没有用户对象。
toString
方法重写,继承类
Object
getUserObject()
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.