模块  java.desktop
软件包  javax.swing.tree

Class DefaultMutableTreeNode

  • 实现的所有接口
    SerializableCloneableMutableTreeNodeTreeNode
    已知直接子类:
    JTree.DynamicUtilTreeNode

    public class DefaultMutableTreeNode
    extends Object
    implements Cloneable, MutableTreeNode, Serializable
    DefaultMutableTreeNode是树数据结构中的通用节点。 有关使用默认可变树节点的示例,请参阅The Java Tutorial中的 How to Use Trees

    树节点可以具有至多一个父节点和0个或更多个子节点。 DefaultMutableTreeNode提供了检查和修改节点的父节点和子节点的操作,以及用于检查节点所属的树的操作。 节点树是通过从节点开始并跟随到父节点和子节点的所有可能链接可以到达的所有节点的集合。 没有父节点的节点是其树的根; 没有孩子的节点是叶子。 树可以由许多子树组成,每个节点充当其自己的子树的根。

    此类提供有效遍历各种顺序中的树或子树或跟踪两个节点之间的路径的枚举。 DefaultMutableTreeNode还可以保持对用户对象的引用,用户对象的使用留给用户。 使用DefaultMutableTreeNodeDefaultMutableTreeNode询问其字符串表示toString()将返回其用户对象的字符串表示形式。

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

    虽然DefaultMutableTreeNode实现了MutableTreeNode接口,并允许您添加MutableTreeNode的任何实现,但并非DefaultMutableTreeNode中的所有方法都适用于所有MutableTreeNodes实现。 特别是对于提供的一些枚举,使用其中一些方法假定DefaultMutableTreeNode仅包含DefaultMutableNode实例。 无论添加什么实现,所有TreeNode / MutableTreeNode方法都将按照定义运行。

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

    另请参见:
    MutableTreeNodeSerialized Form
    • 字段详细信息

      • EMPTY_ENUMERATION

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

        protected MutableTreeNode parent
        此节点的父节点,如果此节点没有父节点,则返回null
      • children

        protected Vector<TreeNode> children
        如果此节点没有子节点,则子节点数组可以为null
      • userObject

        protected transient Object userObject
        可选的用户对象
      • allowsChildren

        protected boolean allowsChildren
        如果节点能够生成子节点,则为true
    • 构造方法详细信息

      • DefaultMutableTreeNode

        public DefaultMutableTreeNode()
        创建一个没有父节点但没有子节点但允许子节点的树节点。
      • DefaultMutableTreeNode

        public DefaultMutableTreeNode​(Object userObject)
        创建一个没有父节点,没有子节点但允许子节点的树节点,并使用指定的用户对象对其进行初始化。
        参数
        userObject - 用户提供的构成节点数据的对象
      • DefaultMutableTreeNode

        public DefaultMutableTreeNode​(Object userObject,
                                      boolean allowsChildren)
        创建一个没有父节点,没有子节点的树节点,使用指定的用户对象初始化,并且仅在指定时允许子节点。
        参数
        userObject - 用户提供的构成节点数据的对象
        allowsChildren - 如果为true,则允许节点具有子节点 - 否则,它始终是叶节点
    • 方法详细信息

      • remove

        public void remove​(int childIndex)
        从此节点的子节点移除指定索引处的子节点,并将该节点的父节点设置为null。 要删除的子节点必须是MutableTreeNode
        Specified by:
        remove接口 MutableTreeNode
        参数
        childIndex - 要删除的子节点的子节点中的索引
        异常
        ArrayIndexOutOfBoundsException - 如果 childIndex超出范围
      • setParent

        public void setParent​(MutableTreeNode newParent)
        将此节点的父节点设置为newParent但不更改父节点的子节点。 insert()remove()调用此方法来重新分配子项的父项,不应从其他任何地方发送消息。
        Specified by:
        setParent接口 MutableTreeNode
        参数
        newParent - 此节点的新父节点
      • getParent

        public TreeNode getParent()
        返回此节点的父节点,如果此节点没有父节点,则返回null。
        Specified by:
        getParent接口 TreeNode
        结果
        此节点的父TreeNode,如果此节点没有父节点,则返回null
      • getChildAt

        public TreeNode getChildAt​(int index)
        返回此节点的子数组中指定索引处的子节点。
        Specified by:
        getChildAt在界面 TreeNode
        参数
        index - 此节点的子数组的索引
        结果
        此节点在指定索引处的子数组中的TreeNode
        异常
        ArrayIndexOutOfBoundsException - 如果 index超出范围
      • getChildCount

        public int getChildCount()
        返回此节点的子节点数。
        Specified by:
        getChildCount接口 TreeNode
        结果
        一个int,给出该节点的子节点数
      • getIndex

        public int getIndex​(TreeNode aChild)
        返回此节点的子数组中指定子节点的索引。 如果指定的节点不是此节点的子节点,则返回-1 该方法执行线性搜索,并且是O(n),其中n是子节点数。
        Specified by:
        getIndex接口 TreeNode
        参数
        aChild - 要在此节点的子节点中搜索的TreeNode
        结果
        一个int给出该节点的子数组中节点的索引,如果指定的节点不是该节点的子节点, -1
        异常
        IllegalArgumentException - 如果 aChild为空
      • children

        public Enumeration<TreeNode> children()
        创建并返回此节点的子节点的前向枚举。 修改此节点的子数组会使修改前创建的所有子枚举失效。
        Specified by:
        children接口 TreeNode
        结果
        此节点的子节点的枚举
      • setAllowsChildren

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

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

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

        public boolean getAllowsChildren()
        如果允许此节点具有子节点,则返回true。
        Specified by:
        getAllowsChildren接口 TreeNode
        结果
        如果此节点允许子节点,则为true,否则为false
      • removeFromParent

        public void removeFromParent()
        从树中删除以此节点为根的子树,为此节点提供null父节点。 如果此节点是其树的根,则不执行任何操作。
        Specified by:
        removeFromParent接口 MutableTreeNode
      • remove

        public void remove​(MutableTreeNode aChild)
        从此节点的子数组中删除 aChild ,为其提供null父项。
        Specified by:
        remove接口 MutableTreeNode
        参数
        aChild - 要删除的此节点的子节点
        异常
        IllegalArgumentException - 如果 aChild为null或不是此节点的子节点
      • removeAllChildren

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

        public boolean isNodeAncestor​(TreeNode anotherNode)
        如果anotherNode是此节点的祖先,则返回true - 如果它是此节点,此节点的父节点或此节点的父节点的祖先。 (请注意,节点被认为是其自身的祖先。)如果anotherNode为null,则此方法返回false。 此操作最差为O(h),其中h是从根到此节点的距离。
        参数
        anotherNode - 要作为此节点的祖先进行测试的节点
        结果
        如果此节点是 anotherNode的后代,则 anotherNode
        另请参见:
        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的祖先,则 anotherNode
        另请参见:
        isNodeAncestor(javax.swing.tree.TreeNode)getSharedAncestor(javax.swing.tree.DefaultMutableTreeNode)
      • getDepth

        public int getDepth()
        返回以此节点为根的树的深度 - 从此节点到叶子的最长距离。 如果此节点没有子节点,则返回0.此操作比getLevel()贵得多,因为它必须有效地遍历以此节点为根的整个树。
        结果
        树的深度,其根是此节点
        另请参见:
        getLevel()
      • getLevel

        public int getLevel()
        返回此节点上方的级别数 - 从根节点到此节点的距离。 如果此节点是根节点,则返回0。
        结果
        此节点上方的级别数
        另请参见:
        getDepth()
      • getPath

        public TreeNode[] getPath()
        返回从根到达此节点的路径。 路径中的最后一个元素是此节点。
        结果
        给出路径的TreeNode对象数组,其中路径中的第一个元素是根,最后一个元素是此节点。
      • getPathToRoot

        protected TreeNode[] getPathToRoot​(TreeNode aNode,
                                           int depth)
        构建节点的父节点,包括根节点,其中原始节点是返回数组中的最后一个元素。 返回数组的长度给出树中节点的深度。
        参数
        aNode - 获取路径的TreeNode
        depth - 一个int,给出了已经对根进行的步骤数(在递归调用时),用于调整返回的数组的大小
        结果
        TreeNodes数组,提供从根到指定节点的路径
      • getUserObjectPath

        public Object[] getUserObjectPath()
        返回从root用户对象路径到达此节点。 如果路径中的某些TreeNode具有空用户对象,则返回的路径将包含空值。
        结果
        用户对象路径,从根目录到达此节点
      • isRoot

        public boolean isRoot()
        如果此节点是树的根,则返回true。 根是树中唯一具有空父级的节点; 每棵树都有一根。
        结果
        如果此节点是其树的根,则返回true
      • getNextNode

        public DefaultMutableTreeNode getNextNode()
        返回此节点树的前序遍历中此节点后面的节点。 如果此节点是遍历的最后一个节点,则返回null。 这是遍历整棵树的低效方式; 而是使用枚举。
        结果
        在前序遍历中跟随此节点的节点,如果此节点是最后一个,则为null
        另请参见:
        preorderEnumeration()
      • getPreviousNode

        public DefaultMutableTreeNode getPreviousNode()
        在此节点树的前序遍历中返回此节点之前的节点。 如果此节点是遍历的第一个节点 - 树的根,则返回null 这是遍历整棵树的低效方式; 而是使用枚举。
        结果
        在前序遍历中此节点之前的节点,如果此节点是第一个节点,则为null
        另请参见:
        preorderEnumeration()
      • preorderEnumeration

        public Enumeration<TreeNode> preorderEnumeration()
        创建并返回一个枚举,该枚举以预先的顺序遍历以此节点为根的子树。 枚举的nextElement()方法返回的第一个节点是此节点。

        通过插入,删除或移动节点来修改树会使修改前创建的任何枚举无效。

        结果
        用于预先遍历树的枚举
        另请参见:
        postorderEnumeration()
      • postorderEnumeration

        public Enumeration<TreeNode> postorderEnumeration()
        创建并返回以后序遍历以此节点为根的子树的枚举。 枚举的nextElement()方法返回的第一个节点是最左边的叶子。 这与深度优先遍历相同。

        通过插入,删除或移动节点来修改树会使修改前创建的任何枚举无效。

        结果
        用于遍历后序遍历树的枚举
        另请参见:
        depthFirstEnumeration()preorderEnumeration()
      • breadthFirstEnumeration

        public Enumeration<TreeNode> breadthFirstEnumeration()
        创建并返回以广度优先顺序遍历以此节点为根的子树的枚举。 枚举的nextElement()方法返回的第一个节点是此节点。

        通过插入,删除或移动节点来修改树会使修改前创建的任何枚举无效。

        结果
        以广度优先顺序遍历树的枚举
        另请参见:
        depthFirstEnumeration()
      • depthFirstEnumeration

        public Enumeration<TreeNode> depthFirstEnumeration()
        创建并返回以深度优先顺序遍历以此节点为根的子树的枚举。 枚举的nextElement()方法返回的第一个节点是最左边的叶子。 这与后序遍历相同。

        通过插入,删除或移动节点来修改树会使修改前创建的任何枚举无效。

        结果
        以深度优先顺序遍历树的枚举
        另请参见:
        breadthFirstEnumeration()postorderEnumeration()
      • pathFromAncestorEnumeration

        public Enumeration<TreeNode> pathFromAncestorEnumeration​(TreeNode ancestor)
        创建并返回从ancestor到此节点的路径之后的枚举。 枚举的nextElement()方法首先返回ancestor ,那么孩子ancestor ,它是此节点的祖先,依此类推,最后返回此节点。 枚举的创建是O(m),其中m是此节点与ancestor (包括ancestor之间的节点数。 每条nextElement()消息为O(1)。

        通过插入,删除或移动节点来修改树会使修改前创建的任何枚举无效。

        参数
        ancestor - 从中开始枚举的节点
        结果
        跟踪从此节点的祖先到此节点的路径的枚举
        异常
        IllegalArgumentException - 如果 ancestor不是此节点的祖先
        另请参见:
        isNodeAncestor(javax.swing.tree.TreeNode)isNodeDescendant(javax.swing.tree.DefaultMutableTreeNode)
      • isNodeChild

        public boolean isNodeChild​(TreeNode aNode)
        如果aNode是此节点的子节点,则返回true。 如果aNode为null,则此方法返回false。
        参数
        aNode - 确定其是否为子节点的节点
        结果
        如果aNode是此节点的子节点, aNode true;否则为aNode 如果aNode为空,则aNode false
      • getFirstChild

        public TreeNode getFirstChild()
        返回此节点的第一个子节点。 如果此节点没有子节点,则抛出NoSuchElementException。
        结果
        这个节点的第一个孩子
        异常
        NoSuchElementException - 如果此节点没有子节点
      • getLastChild

        public TreeNode getLastChild()
        返回此节点的最后一个子节点。 如果此节点没有子节点,则抛出NoSuchElementException。
        结果
        这个节点的最后一个子节点
        异常
        NoSuchElementException - 如果此节点没有子节点
      • getChildAfter

        public TreeNode getChildAfter​(TreeNode aChild)
        返回紧跟在aChild之后的此节点的子数组中的子节点,该子节点必须是此节点的子节点。 如果aChild是最后一个子aChild ,则返回null。 此方法对该节点的子节点执行aChild的线性搜索,并且是O(n),其中n是子节点数; 要遍历整个子数组,请使用枚举。
        参数
        aChild - 要在其后查找下一个子节点的子节点
        结果
        紧跟在 aChild的此节点的子节点
        异常
        IllegalArgumentException - 如果 aChild为null或不是此节点的子节点
        另请参见:
        children
      • getChildBefore

        public TreeNode getChildBefore​(TreeNode aChild)
        返回紧接在aChild之前的此节点的子数组中的子节点,该子节点必须是此节点的子节点。 如果aChild是第一个子aChild ,则返回null。 此方法对此节点的子节点执行aChild的线性搜索,并且是O(n),其中n是子节点数。
        参数
        aChild - 要在其之前查找上一个子节点的子节点
        结果
        紧接在 aChild之前的此节点的子节点
        异常
        IllegalArgumentException - 如果 aChild为null或不是此节点的子节点
      • isNodeSibling

        public boolean isNodeSibling​(TreeNode anotherNode)
        如果anotherNode是此节点的兄弟节点(具有相同的父节点),则返回true。 节点是它自己的兄弟节点。 如果anotherNode为null,则返回false。
        参数
        anotherNode - 要作为此节点的兄弟节点进行测试的节点
        结果
        如果 anotherNode是此节点的兄弟,则 anotherNode true
      • getSiblingCount

        public int getSiblingCount()
        返回此节点的兄弟节点数。 节点是它自己的兄弟节点(如果它没有父节点或没有兄弟节点,则此方法返回1 )。
        结果
        此节点的兄弟节点数
      • getNextSibling

        public DefaultMutableTreeNode getNextSibling()
        返回父节点子节点中此节点的下一个兄弟节点。 如果此节点没有父节点或父节点的最后一个节点,则返回null。 该方法执行线性搜索,即O(n),其中n是子节点数; 要遍历整个数组,请使用父级的子枚举。
        结果
        紧跟在此节点之后的此节点的兄弟节点
        另请参见:
        children
      • getPreviousSibling

        public DefaultMutableTreeNode getPreviousSibling()
        返回父节点子节点中此节点的上一个兄弟节点。 如果此节点没有父节点或父节点的第一个子节点,则返回null。 此方法执行线性搜索,即O(n),其中n是子项数。
        结果
        紧接在此节点之前的此节点的兄弟节点
      • isLeaf

        public boolean isLeaf()
        如果此节点没有子节点,则返回true。 要区分没有子节点的节点和不能有子节点的节点(例如,将文件与空目录区分开来),请将此方法与getAllowsChildren结合使用
        Specified by:
        isLeaf接口 TreeNode
        结果
        如果此节点没有子节点,则为true
        另请参见:
        getAllowsChildren()
      • getNextLeaf

        public DefaultMutableTreeNode getNextLeaf()
        返回此节点后的叶子,如果此节点是树中的最后一个叶子,则返回null。

        MutableNode接口的此实现中,此操作效率非常低。 为了确定下一个节点,该方法首先在父节点的子列表中执行线性搜索,以便找到当前节点。

        该实现使得该操作适合于来自已知位置的短遍历。 但是要遍历树中的所有叶子,您应该使用depthFirstEnumeration枚举树中的节点,并在每个节点上使用isLeaf来确定哪些是叶子。

        结果
        返回此节点后的下一个叶子
        另请参见:
        depthFirstEnumeration()isLeaf()
      • getPreviousLeaf

        public DefaultMutableTreeNode getPreviousLeaf()
        返回此节点之前的叶子,如果此节点是树中的第一个叶子,则返回null。

        MutableNode接口的此实现中,此操作效率非常低。 为了确定前一节点,该方法首先在父节点的子列表中执行线性搜索,以便找到当前节点。

        该实现使得该操作适合于来自已知位置的短遍历。 但是要遍历树中的所有叶子,您应该使用depthFirstEnumeration枚举树中的节点,并在每个节点上使用isLeaf来确定哪些是叶子。

        结果
        返回此节点之前的叶子
        另请参见:
        depthFirstEnumeration()isLeaf()
      • getLeafCount

        public int getLeafCount()
        返回作为此节点后代的叶子总数。 如果此节点是叶子,则返回1 此方法为O(n),其中n是此节点的后代数。
        结果
        此节点下的叶子数
        另请参见:
        isNodeAncestor(javax.swing.tree.TreeNode)
      • toString

        public String toString()
        返回将 toString()发送到此节点的用户对象的结果,如果节点没有用户对象,则返回空字符串。
        重写:
        toStringObject
        结果
        对象的字符串表示形式。
        另请参见:
        getUserObject()
      • clone

        public Object clone()
        重写以使克隆公开。 返回此节点的浅表副本; 新节点没有父节点或子节点,并且具有对同一用户对象的引用(如果有)。
        重写:
        cloneObject
        结果
        此节点的副本
        另请参见:
        Cloneable