Module java.desktop
Package javax.swing.tree

Class DefaultTreeModel

java.lang.Object
javax.swing.tree.DefaultTreeModel
所有已实现的接口:
Serializable, TreeModel

public class DefaultTreeModel extends Object implements Serializable, TreeModel
使用TreeNodes的简单树数据模型。有关更多信息和使用DefaultTreeModel的示例,请参阅Java教程中的如何使用树

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

  • Field Details

    • root

      protected TreeNode root
      树的根。
    • listenerList

      protected EventListenerList listenerList
      监听器。
    • asksAllowsChildren

      protected boolean asksAllowsChildren
      确定isLeaf方法如何判断节点是否为叶节点。如果为true,则节点是叶节点,如果不允许有子节点(即使没有子节点,也不是叶节点)。例如,在文件系统中,这让您区分文件夹节点和文件节点。

      如果此值为false,则任何没有子节点的节点都是叶节点,任何节点都可以获取子节点。

      参见:
  • Constructor Details

    • DefaultTreeModel

      @ConstructorProperties("root") public DefaultTreeModel(TreeNode root)
      创建一个任何节点都可以有子节点的树。
      参数:
      root - 树的根节点的TreeNode对象
      参见:
    • DefaultTreeModel

      public DefaultTreeModel(TreeNode root, boolean asksAllowsChildren)
      创建一个树,指定任何节点是否可以有子节点,或者只有某些节点可以有子节点。
      参数:
      root - 树的根节点的TreeNode对象
      asksAllowsChildren - 一个布尔值,如果任何节点都可以有子节点,则为false,如果每个节点都被要求查看是否可以有子节点,则为true
      参见:
  • Method Details

    • setAsksAllowsChildren

      public void setAsksAllowsChildren(boolean newValue)
      设置是否通过询问getAllowsChildren()或isLeaf()来测试叶节点。如果newValue为true,则发送getAllowsChildren()消息,否则发送isLeaf()消息。
      参数:
      newValue - 如果为true,则发送getAllowsChildren()消息,否则发送isLeaf()消息
    • asksAllowsChildren

      public boolean asksAllowsChildren()
      告诉如何确定叶节点。
      返回:
      如果只有不允许有子节点的节点是叶节点,则为true,如果节点没有子节点(即使允许),则为false
      参见:
    • setRoot

      public void setRoot(TreeNode root)
      将根设置为root。如果空的root意味着树不显示任何内容,这是合法的。
      参数:
      root - 树根的新值
    • getRoot

      public Object getRoot()
      返回树的根。如果树没有节点,则返回null。
      指定者:
      getRoot 在接口 TreeModel
      返回:
      树的根
    • getIndexOfChild

      public int getIndexOfChild(Object parent, Object child)
      返回父节点中子节点的索引。如果父节点或子节点为null,则返回-1。
      指定者:
      getIndexOfChild 在接口 TreeModel
      参数:
      parent - 树中的一个节点,从此数据源获取
      child - 我们感兴趣的节点
      返回:
      子节点在父节点中的索引,如果父节点或子节点为null,则返回-1
    • getChild

      public Object getChild(Object parent, int index)
      返回父节点parent在父节点的子节点数组中索引为index的子节点。必须先从此数据源获取parent节点。如果indexparent的有效索引(即index >= 0 && index < getChildCount(parent)),则不应返回null。
      指定者:
      getChild 在接口 TreeModel
      参数:
      parent - 树中的一个节点,从此数据源获取
      index - 要返回的子节点的索引
      返回:
      父节点parent在索引index处的子节点
    • getChildCount

      public int getChildCount(Object parent)
      返回父节点parent的子节点数。如果节点是叶节点或没有子节点,则返回0。必须先从此数据源获取parent节点。
      指定者:
      getChildCount 在接口 TreeModel
      参数:
      parent - 树中的一个节点,从此数据源获取
      返回:
      节点parent的子节点数
    • isLeaf

      public boolean isLeaf(Object node)
      返回指定节点是否为叶节点。测试的方式取决于asksAllowsChildren设置。
      指定者:
      isLeaf 在接口 TreeModel
      参数:
      node - 要检查的节点
      返回:
      如果节点是叶节点,则为true
      参见:
    • reload

      public void reload()
      如果修改了此模型依赖的TreeNode,请调用此方法。模型将通知所有监听器模型已更改。
    • valueForPathChanged

      public void valueForPathChanged(TreePath path, Object newValue)
      设置由路径标识的TreeNode的用户对象,并发布节点更改。如果在TreeModel中使用自定义用户对象,则需要对其进行子类化,并将更改节点的用户对象设置为有意义的内容。
      指定者:
      valueForPathChanged 在接口 TreeModel
      参数:
      path - 用户已更改的节点的路径
      newValue - 来自TreeCellEditor的新值
    • insertNodeInto

      public void insertNodeInto(MutableTreeNode newChild, MutableTreeNode parent, int index)
      调用此方法以在父节点的children中的位置index处插入newChild。然后将调用nodesWereInserted来创建适当的事件。这是添加子节点的首选方式,因为它将创建适当的事件。
      参数:
      newChild - 要插入的子节点
      parent - 将添加新节点的节点
      index - 父节点的children的索引
    • removeNodeFromParent

      public void removeNodeFromParent(MutableTreeNode node)
      调用此方法从其父节点中移除节点。这将调用nodesWereRemoved来创建适当的事件。这是删除节点的首选方式,因为它会为您处理事件创建。
      参数:
      node - 要从其父节点中移除的节点
    • nodeChanged

      public void nodeChanged(TreeNode node)
      在更改节点在树中的表示方式后调用此方法。
      参数:
      node - 已更改的节点
    • reload

      public void reload(TreeNode node)
      如果您修改了此模型依赖的TreeNode,请调用此方法。模型将通知所有侦听器模型在给定节点下面已更改。
      参数:
      node - 模型已更改的节点下面的节点
    • nodesWereInserted

      public void nodesWereInserted(TreeNode node, int[] childIndices)
      在将一些TreeNodes插入节点后调用此方法。childIndices应该是新元素的索引,并且必须按升序排序。
      参数:
      node - 子节点计数已增加的父节点
      childIndices - 插入的子节点的索引
    • nodesWereRemoved

      public void nodesWereRemoved(TreeNode node, int[] childIndices, Object[] removedChildren)
      在从节点中删除一些TreeNodes后调用此方法。childIndices应该是已删除元素的索引,并且必须按升序排序。removedChildren应该是已删除的子对象的数组。
      参数:
      node - 子节点已被移除的父节点
      childIndices - 已移除子节点的索引
      removedChildren - 已移除的子对象的数组
    • nodesChanged

      public void nodesChanged(TreeNode node, int[] childIndices)
      在更改由childIndicies标识的子节点在树中的表示方式后调用此方法。
      参数:
      node - 已更改的节点
      childIndices - 已更改子节点的索引
    • nodeStructureChanged

      public void nodeStructureChanged(TreeNode node)
      如果您完全更改了节点及其子节点的子节点,请调用此方法。这将发布一个treeStructureChanged事件。
      参数:
      node - 已更改的节点
    • getPathToRoot

      public TreeNode[] getPathToRoot(TreeNode aNode)
      从节点本身开始构建父节点,直到根节点,其中原始节点是返回数组中的最后一个元素。返回数组的长度给出了节点在树中的深度。
      参数:
      aNode - 要获取路径的TreeNode
      返回:
      一个TreeNodes数组,给出从根节点到指定节点的路径
    • getPathToRoot

      protected TreeNode[] getPathToRoot(TreeNode aNode, int depth)
      从节点本身开始构建父节点,直到根节点,其中原始节点是返回数组中的最后一个元素。返回数组的长度给出了节点在树中的深度。
      参数:
      aNode - 要获取路径的TreeNode
      depth - 一个int,表示已经向根节点(在递归调用中)走过的步数,用于确定返回数组的大小
      返回:
      一个TreeNodes数组,给出从根节点到指定节点的路径
    • addTreeModelListener

      public void addTreeModelListener(TreeModelListener l)
      添加一个在树更改后发布的TreeModelEvent的监听器。
      指定者:
      addTreeModelListener 在接口 TreeModel
      参数:
      l - 要添加的监听器
      参见:
    • removeTreeModelListener

      public void removeTreeModelListener(TreeModelListener l)
      移除先前使用addTreeModelListener()添加的监听器。
      指定者:
      removeTreeModelListener 在接口 TreeModel
      参数:
      l - 要移除的监听器
      参见:
    • getTreeModelListeners

      public TreeModelListener[] getTreeModelListeners()
      返回在此模型上注册的所有树模型监听器的数组。
      返回:
      所有此模型的TreeModelListener或如果当前未注册任何树模型监听器,则返回一个空数组
      自1.4起:
      参见:
    • fireTreeNodesChanged

      protected void fireTreeNodesChanged(Object source, Object[] path, int[] childIndices, Object[] children)
      通知所有已注册对此事件类型感兴趣的侦听器。事件实例是使用传递给fire方法的参数延迟创建的。
      参数:
      source - TreeModelEvent的源;通常为this
      path - 已更改的节点的父节点的路径;使用null来标识根节点已更改
      childIndices - 已更改元素的索引
      children - 已更改的元素
    • fireTreeNodesInserted

      protected void fireTreeNodesInserted(Object source, Object[] path, int[] childIndices, Object[] children)
      通知所有已注册对此事件类型感兴趣的侦听器。事件实例是使用传递给fire方法的参数延迟创建的。
      参数:
      source - TreeModelEvent的源;通常为this
      path - 节点已添加到的父节点的路径
      childIndices - 新元素的索引
      children - 新元素
    • fireTreeNodesRemoved

      protected void fireTreeNodesRemoved(Object source, Object[] path, int[] childIndices, Object[] children)
      通知所有已注册对此事件类型感兴趣的侦听器。事件实例是使用传递给fire方法的参数延迟创建的。
      参数:
      source - TreeModelEvent的源;通常为this
      path - 节点已从中删除的父节点的路径
      childIndices - 已删除元素的索引
      children - 已删除的元素
    • fireTreeStructureChanged

      protected void fireTreeStructureChanged(Object source, Object[] path, int[] childIndices, Object[] children)
      通知所有已注册对此事件类型感兴趣的侦听器。事件实例是使用传递给fire方法的参数延迟创建的。
      参数:
      source - TreeModelEvent的源;通常为this
      path - 结构已更改的父节点的路径;使用null来标识根节点已更改
      childIndices - 受影响元素的索引
      children - 受影响的元素
    • getListeners

      public <T extends EventListener> T[] getListeners(Class<T> listenerType)
      返回当前在此模型上注册为FooListener的所有对象的数组。FooListener是使用addFooListener方法注册的。

      您可以使用类字面量(例如FooListener.class)指定listenerType参数。例如,您可以使用以下代码查询DefaultTreeModel m的树模型监听器:

      TreeModelListener[] tmls = (TreeModelListener[])(m.getListeners(TreeModelListener.class));
      如果不存在此类监听器,则此方法将返回一个空数组。
      类型参数:
      T - 监听器类型
      参数:
      listenerType - 请求的监听器类型
      返回:
      一个数组,其中包含在此组件上注册为FooListener的所有对象,如果尚未添加此类监听器,则返回一个空数组
      抛出:
      ClassCastException - 如果listenerType未指定实现java.util.EventListener的类或接口
      自1.3起:
      参见: