javax.swing.tree

接口
异常
java.lang.Object
  继承者 javax.swing.tree.DefaultMutableTreeNode
所有已实现的接口:
Serializable, Cloneable, MutableTreeNode, TreeNode
直接已知子类:
JTree.DynamicUtilTreeNode

public class DefaultMutableTreeNode
     
extends Object
implements Cloneable, MutableTreeNode, Serializable

DefaultMutableTreeNode 是树数据结构中的通用节点。有关使用默认可变树节点的示例,请参阅 The Java Tutorial 中的 How to Use Trees 一节。

一个树节点最多可以有一个父节点、0 或多个子节点。DefaultMutableTreeNode 为检查和修改节点的父节点和子节点提供操作,也为检查节点所属的树提供操作。节点的树是所有节点的集合,通过从某一节点开始并沿着父节点和子节点的所有可能的链接,可以访问这些节点。不带父节点的节点是树的根;不带子节点的节点是叶节点。树可以由许多子树组成,每个节点充当自已的子树的根。

此类提供按各种顺序有效地遍历树或子树,或者沿着两节点间的路径进行遍历的枚举。DefaultMutableTreeNode 还可以保存对用户对象的引用,用户对象由用户使用。通过 toString() 请求 DefaultMutableTreeNode 的字符串表示形式将返回其用户对象的字符串表示形式。

这不是一个线程安全的类。如果打算在多个线程中使用 DefaultMutableTreeNode(或 TreeNodes 的树),则需要执行自己的同步。要采用的较好惯例是在树的根节点上进行同步。

尽管 DefaultMutableTreeNode 实现 MutableTreeNode 接口,并允许您将其添加到 MutableTreeNode 的任何实现中,但是并不是 DefaultMutableTreeNode 中的所有方法都将适用于所有的 MutableTreeNodes 实现。特别是通过提供的一些枚举,使用其中一些方法,我们假定 DefaultMutableTreeNode 只包含 DefaultMutableNode 实例。无论添加什么实现,所有的 TreeNode/MutableTreeNode 方法都将表现出定义的行为。

警告:此类的已序列化对象与以后的 Swing 版本不兼容。当前的序列化支持适用于短期存储或运行相同 Swing 版本的应用程序之间的 RMI。从 1.4 版本开始,已在 java.beans 包中添加了支持所有 JavaBeansTM 长期存储的功能。请参见 XMLEncoder

另请参见:
MutableTreeNode

字段摘要
protected  boolean allowsChildren
          如果该节点可以有子节点,则为 true
protected  Vector children
          子节点的数组,如果此节点没有子节点,则可以为 null
static Enumeration<TreeNode> EMPTY_ENUMERATION
          始终为空的枚举。
protected  MutableTreeNode parent
          此节点的父节点,如果此节点没有父节点,则为 null
protected  Object userObject
          可选用户对象
 
构造方法摘要
DefaultMutableTreeNode()
          创建没有父节点和子节点的树节点,该树节点允许有子节点。
DefaultMutableTreeNode(Object userObject)
          创建没有父节点和子节点、但允许有子节点的树节点,并使用指定的用户对象对它进行初始化。
DefaultMutableTreeNode(Object userObject, boolean allowsChildren)
          创建没有父节点和子节点的树节点,使用指定的用户对象对它进行初始化,仅在指定时才允许有子节点。
 
方法摘要
 void add(MutableTreeNode newChild)
          从其父节点移除 newChild,并通过将其添加到此节点的子数组的结尾,使其成为此节点的子节点。
 Enumeration breadthFirstEnumeration()
          创建并返回一个枚举,该枚举按广度优先的顺序遍历以此节点为根的子树。
 Enumeration children()
          创建并返回此节点的子节点的正向枚举。
 Object clone()
          重写以复制 public。
 Enumeration depthFirstEnumeration()
          创建并返回一个枚举,该枚举按深度优先的顺序遍历以此节点为根的子树。
 boolean getAllowsChildren()
          如果允许此节点拥有子节点,则返回 true。
 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()
          返回此节点后面的叶节点,如果此节点是树中的最后一个叶节点,则返回 null。
 DefaultMutableTreeNode getNextNode()
          返回在此节点的树的前序遍历中此节点之后的节点。
 DefaultMutableTreeNode getNextSibling()
          返回父节点的子节点数组中此节点的下一个兄弟节点。
 TreeNode getParent()
          返回此节点的父节点,如果此节点没有父节点,则返回 null。
 TreeNode[] getPath()
          返回从根到达此节点的路径。
protected  TreeNode[] getPathToRoot(TreeNode aNode, int depth)
          构建节点的父节点一直到根节点(包括根节点),其中源节点是返回数组中的最后一个元素。
 DefaultMutableTreeNode getPreviousLeaf()
          返回此节点之前的叶节点,如果此节点是树中的第一个叶节点,则返回 null。
 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()
          如果此节点没有子节点,则返回 true。
 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()
          如果此节点是树的根,则返回 true。
 Enumeration pathFromAncestorEnumeration(TreeNode ancestor)
          创建并返回沿着从 ancestor 到此节点的路径的一个枚举。
 Enumeration postorderEnumeration()
          创建并返回按后序遍历以此节点为根的树的一个枚举。
 Enumeration preorderEnumeration()
          创建并返回按前序遍历以此节点为根的子树的一个枚举。
 void remove(int childIndex)
          从此节点的子节点中移除指定索引处的子节点,并将该节点的父节点设置为 null。
 void remove(MutableTreeNode aChild)
          通过向其提供一个 null 父节点,从此节点的子节点数组移除 aChild
 void removeAllChildren()
          通过将其父节点设置为 null,移除此节点的所有子节点。
 void removeFromParent()
          通过向此节点提供一个 null 父节点,从树中移除以此节点为根的子树。
 void setAllowsChildren(boolean allows)
          确定是否允许此节点拥有子节点。
 void setParent(MutableTreeNode newParent)
          将此节点的父节点设置为 newParent,但不更改父节点的子节点数组。
 void setUserObject(Object userObject)
          将此节点的用户对象设置为 userObject
 String toString()
          返回将 toString() 发送到此节点的用户对象的结果,如果此节点没有用户对象,则返回 null。
 
从类 java.lang.Object 继承的方法
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

字段详细信息

EMPTY_ENUMERATION

public static final Enumeration<TreeNode> EMPTY_ENUMERATION
始终为空的枚举。当请求叶节点的子节点的枚举时使用它。


parent

protected MutableTreeNode parent
此节点的父节点,如果此节点没有父节点,则为 null


children

protected Vector children
子节点的数组,如果此节点没有子节点,则可以为 null


userObject

protected transient Object userObject
可选用户对象


allowsChildren

protected boolean allowsChildren
如果该节点可以有子节点,则为 true

构造方法详细信息

DefaultMutableTreeNode

public DefaultMutableTreeNode()
创建没有父节点和子节点的树节点,该树节点允许有子节点。


DefaultMutableTreeNode

public DefaultMutableTreeNode(Object userObject)
创建没有父节点和子节点、但允许有子节点的树节点,并使用指定的用户对象对它进行初始化。

参数:
userObject - 用户提供的 Object,它构成节点的数据

DefaultMutableTreeNode

public DefaultMutableTreeNode(Object userObject,
                              boolean allowsChildren)
创建没有父节点和子节点的树节点,使用指定的用户对象对它进行初始化,仅在指定时才允许有子节点。

参数:
userObject - 用户提供的 Object,它构成该节点的数据
allowsChildren - 如果为 true,则允许该节点有子节点,否则它始终为一个叶节点
方法详细信息

insert

public void insert(MutableTreeNode newChild,
                   int childIndex)
从其现有父节点移除 newChild(如果它有父节点),将子节点的父节点设置为此节点,然后,将该子节点添加到此节点位于索引 childIndex 处的子节点数组。 newChild 不能为 null,也不能为此节点的祖先。

指定者:
接口 MutableTreeNode 中的 insert
参数:
newChild - 在此节点下插入的 MutableTreeNode
childIndex - 此节点的子节点数组中的索引,它是此节点插入的位置
抛出:
ArrayIndexOutOfBoundsException - 如果 childIndex 超出边界
IllegalArgumentException - 如果 newChild 为 null,或者是此节点的祖先
IllegalStateException - 如果此节点不允许有子节点
另请参见:
isNodeDescendant(javax.swing.tree.DefaultMutableTreeNode)

remove

public void remove(int childIndex)
从此节点的子节点中移除指定索引处的子节点,并将该节点的父节点设置为 null。要移除的子节点必须是 MutableTreeNode

指定者:
接口 MutableTreeNode 中的 remove
参数:
childIndex - 要移除的此节点的子节点数组中子节点的索引
抛出:
ArrayIndexOutOfBoundsException - 如果 childIndex 超出边界

setParent

public void setParent(MutableTreeNode newParent)
将此节点的父节点设置为 newParent,但不更改父节点的子节点数组。从 insert()remove() 调用此方法,以重新分配子节点的父节点,而不应从其他任何地方向它传递消息。

指定者:
接口 MutableTreeNode 中的 setParent
参数:
newParent - 此节点的新父节点

getParent

public TreeNode getParent()
返回此节点的父节点,如果此节点没有父节点,则返回 null。

指定者:
接口 TreeNode 中的 getParent
返回:
此节点的父 TreeNode,如果此节点没有父节点,则返回 null

getChildAt

public TreeNode getChildAt(int index)
返回此节点的子节点数组中指定索引处的子节点。

指定者:
接口 TreeNode 中的 getChildAt
参数:
index - 此节点的子节点数组中的一个索引
返回:
此节点的子节点数组中指定索引处的 TreeNode
抛出:
ArrayIndexOutOfBoundsException - 如果 index 超出边界

getChildCount

public int getChildCount()
返回此节点的子节点数。

指定者:
接口 TreeNode 中的 getChildCount
返回:
提供此节点的子节点数的 int

getIndex

public int getIndex(TreeNode aChild)
返回此节点的子节点数组中指定子节点的索引。如果指定节点不是此节点的子节点,则返回 -1。此方法执行线性搜索,该方法花费时间为 O(n),其中 n 表示子节点数。

指定者:
接口 TreeNode 中的 getIndex
参数:
aChild - 要在此节点的子节点中搜索的 TreeNode
返回:
提供此节点的子节点数组中节点索引的 int,如果指定的节点不是此节点的子节点,则返回 -1
抛出:
IllegalArgumentException - 如果 aChild 为 null

children

public Enumeration children()
创建并返回此节点的子节点的正向枚举。修改此节点的子节点数组会使修改前创建的任何子节点枚举无效。

指定者:
接口 TreeNode 中的 children
返回:
此节点的子节点 Enumeration

setAllowsChildren

public void setAllowsChildren(boolean allows)
确定是否允许此节点拥有子节点。如果 allows 为 false,则移除此节点的所有子节点。

注:默认情况下,节点允许有子节点。

参数:
allows - 如果允许此节点拥有子节点,则为 true

getAllowsChildren

public boolean getAllowsChildren()
如果允许此节点拥有子节点,则返回 true。

指定者:
接口 TreeNode 中的 getAllowsChildren
返回:
如果此节点允许拥有子节点,则返回 true,否则返回 false

setUserObject

public void setUserObject(Object userObject)
将此节点的用户对象设置为 userObject

指定者:
接口 MutableTreeNode 中的 setUserObject
参数:
userObject - 构成此节点的用户指定数据的 Object
另请参见:
getUserObject(), toString()

getUserObject

public Object getUserObject()
返回此节点的用户对象。

返回:
用户存储在此节点的 Object
另请参见:
setUserObject(java.lang.Object), toString()

removeFromParent

public void removeFromParent()
通过向此节点提供一个 null 父节点,从树中移除以此节点为根的子树。如果此节点是其树的根,则不执行任何操作。

指定者:
接口 MutableTreeNode 中的 removeFromParent

remove

public void remove(MutableTreeNode aChild)
通过向其提供一个 null 父节点,从此节点的子节点数组移除 aChild

指定者:
接口 MutableTreeNode 中的 remove
参数:
aChild - 要移除的此节点的子节点
抛出:
IllegalArgumentException - 如果 aChild 为 null,或者不是此节点的子节点

removeAllChildren

public void removeAllChildren()
通过将其父节点设置为 null,移除此节点的所有子节点。如果此节点没有子节点,则此方法不执行任何操作。


add

public void add(MutableTreeNode newChild)
从其父节点移除 newChild,并通过将其添加到此节点的子数组的结尾,使其成为此节点的子节点。

参数:
newChild - 作为此节点的子节点添加的节点
抛出:
IllegalArgumentException - 如果 newChild 为 null
IllegalStateException - 如果此节点不允许拥有子节点
另请参见:
insert(javax.swing.tree.MutableTreeNode, int)

isNodeAncestor

public boolean isNodeAncestor(TreeNode anotherNode)
如果 anotherNode 是此节点的祖先 -- 如果它是此节点、此节点的父节点或此节点的父节点的祖先,则返回 true。(注意,节点被认为是它本身的祖先。)如果 anotherNode 为 null,则此方法返回 false。此操作至少花费时间 O(h),其中 h 表示根到此节点的距离。

参数:
anotherNode - 测试是否为此节点的祖先的节点
返回:
如果此节点是 anotherNode 的后代,则返回 true
另请参见:
isNodeDescendant(javax.swing.tree.DefaultMutableTreeNode), getSharedAncestor(javax.swing.tree.DefaultMutableTreeNode)

isNodeDescendant

public boolean isNodeDescendant(DefaultMutableTreeNode anotherNode)
如果 anotherNode 是此节点的后代 -- 如果它是此节点、此节点的一个子节点或此节点的一个子节点的后代,则返回 true。注意,节点被认为是它本身的后代。如果 anotherNode 为 null,则返回 false。此操作至少花费时间 O(h),其中 h 表示根到 anotherNode 的距离。

参数:
anotherNode - 测试是否为此节点的后代的节点
返回:
如果此节点是 anotherNode 的祖先,则返回 true
另请参见:
isNodeAncestor(javax.swing.tree.TreeNode), getSharedAncestor(javax.swing.tree.DefaultMutableTreeNode)

getSharedAncestor

public TreeNode getSharedAncestor(DefaultMutableTreeNode aNode)
返回此节点和 aNode 最近的共同祖先。如果不存在这样的祖先 -- 如果此节点和 aNode 位于不同的树中,或者 aNode 为 null,则返回 null。节点被认为是它本身的祖先。

参数:
aNode - 查找其共同祖先的节点
返回:
此节点和 aNode 最近的共同祖先,如果没有,则返回 null
另请参见:
isNodeAncestor(javax.swing.tree.TreeNode), isNodeDescendant(javax.swing.tree.DefaultMutableTreeNode)

isNodeRelated

public boolean isNodeRelated(DefaultMutableTreeNode aNode)
当且仅当 aNode 位于与此节点相同的树中时,返回 true。如果 aNode 为 null,则返回 false。

返回:
如果