(swing读书笔记)JTree简介(上)

 

(swing读书笔记)JTree简介(上)

                                              By cszhao1980

同JTable类似,JTree也是一个负责的组件,其周围也有大量附属接口、类,如下图所示:

(swing读书笔记)JTree简介(上)_第1张图片

一.TreeNode(树节点)

TreeNode是JTree的核心组成部分,通过TreeNode实现了Tree的基本结构。

swing提供了三个相关的接口和类。

                                    

接口总结20-1 TreeNode

public abstract Enumeration children()  —— 枚举children
  public abstract TreeNode getParent()  —— 获取父节点
  public abstract TreeNode getChildAt(int) —— 每个节点都有index,根据index获取节点
  public abstract int getChildCount()     —— children数量
  public abstract int getIndex(TreeNode)  —— 根据节点获取index
  public abstract boolean getAllowsChildren()
  public abstract boolean isLeaf()
  最后两个方法用来确定一个节点是文件夹,还是树叶:

(1)         isLeaf()——只要此节点没有children,就返回true;

(2)         getAllowsChildren()——表示是否可以拥有children,而不是目前是否拥有children。

接口总结20-2 MutableTreeNode

扩展:TreeNode
  public abstract void insert(MutableTreeNode child, int index)
  public abstract void remove(int index)
  public abstract void remove(MutableTreeNode child)
  public abstract void removeFromParent()
  public abstract void setParent(MutableTreeNode)
  public abstract void setUserObject(Object)
  上面列出的第一组方法用来插入和删除子节点,子节点可以通过索引或引用来删除。removeFromParent方法用来将节点从父节点中删除,并更新父节点的子节点数目。
  上面列出的最后两个方法用来设置一个节点的父节点和用户对象(UserObject)。

一般情况下,UserObject是构成“树节点”的“业务”数据,比如,该节点记录了Integer、double、或String,则userObject就分别是这三种Object。比如,DefaultMutableTreeNode就定义了两个使用UserObject来进行初始化的构造函数。

DefaultMutableTreeNode类

开发人员很少直接实现TreeNode接口,这是因为Swing在DefaultMutableTreeNode类中提供了TreeNode接口的一个常用的缺省实现。数目众多的树节点扩展了DefaultMutableTreeNode。

构造方法摘要

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

 

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

 

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

 

 

除了接口定义的各种方法外,该类还实现了一些其他的方法,方便使用:

 void

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

 TreeNode

getFirstChild()
          返回此节点的第一个子节点。

DefaultMutableTreeNode

getFirstLeaf()
          查找并返回为此节点后代的第一个叶节点,即此节点或其第一个子节点的第一个叶节点。

 TreeNode

getLastChild()
          返回此节点的最后一个子节点。

 DefaultMutableTreeNode

getLastLeaf()
          查找并返回为此节点后代的最后一个叶节点,即此节点或其最后一个子节点的最后一个叶节点。

 DefaultMutableTreeNode

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

DefaultMutableTreeNode

getNextNode()
          返回在此节点的树的前序遍历中此节点之后的节点。

 TreeNode[]

getPath()
          返回从根到达此节点的路径。

 Object

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

 

JTree的TreeNode设计非常成功,比如,swing.pdf有一个例子,扩展DefaultMutableTreeNode实现文件导航器,短短几十行代码就完成了,十分的漂亮。

二.TreePath(树路径)

TreePath类表示TreeNode的路径,它的内部实现其实是一个Objects 数组,每个成员都是一个TreeNode。

一般来说,我们不直接生成TreePath,而是通过TreeNode实现类(如DefaultMutableTreeNode)获取Path。

 

方法摘要

 Object

getLastPathComponent()
          返回此路径的最后一个组件。

          (即节点自身)

 TreePath

getParentPath()
          返回包含除最后一个路径组件之外的此对象所有元素的路径。

          (即父节点的路径)

 Object[]

getPath()
          返回有序的 Objects 数组,它包含此 TreePath 的组件。

 Object

getPathComponent(int element)
          返回指定索引位置的路径组件。

 int

getPathCount()
          返回路径中的元素数。

 boolean

isDescendant(TreePath aTreePath)
          如果 aTreePath 为此 TreePath 的后代,则返回 true。

 TreePath

pathByAddingChild(Object child)
          返回包含此对象的所有元素加上 child 的新路径。

 boolean

equals(Object o)
       
   通过检查路径中每个元素的相等性,测试两个 TreePaths 的相等性。

你可能感兴趣的:((swing读书笔记)JTree简介(上))