软件开发

当前位置:首页 > 软件开发

《Java核心技术高级特性》(第六章)(续)

6.3 树

每个使用过分层结构的文件系统的计算机用户都见过树状显示。当然,目录和文件形式

仅仅是树状组织结构中的- -种。日常生活中还有很多这样的树结构,例如国家、州以及城市

之间的层次结构,如图6-15所示。

作为一名编程人员, 我们经常需要显示这些树型结构。幸运的是,Swing 类库中有一-个

正是用于此目的的JTree类。JTree 类(以及它的辅助类)负责布局树状结构,按照用户请

求展开或折叠树的节点。在本节中,我们将介绍怎样使用JTree类。

与其他复杂的Swing构件-样,我们必须集中介绍--些常用方法,无法涉及所有的细

节。如果读者想获得与众不同的效果,我们推荐你参考David M. Geary撰写的《Graphic Java3》

(第3版),Kim Topley编写的《Core Swing》。

在我们深入展开之前,先介绍- -些术语(参见图6-16)。一棵树由一-些节点(node)组

成。每个节点要么是叶节点(leaf) 要么是有孩子节点(child node)的节点。除了根节点(root

node),每- 一个节点都有一一个惟- -的父 节点(parent node)。-棵树只有-一个根节点。有时,你

可能有一个树的集合,其中每棵树都有自己的根节点。这样的集合称作森林(forest)。

新梦想IT职业教育

6.3.1简 单的树

在第一个示例程序中,我们仅仅展示了一个具有几个节点的树(参见图6-18)。如同

大多数Swing构件一样,只要提供一个数据模型,构件就可以将它显示出来。为了构建

JTree,需要在构造器中提供这样-一个树 模型:

TeeModel model =.。;
JTree tree■new JTree(model);

注意: 还有一些构造器 可以用一些元素的集合来构建树。

JTee(Object[] nodes)
JTree(Vector<?> nodes)
JTree(Hashtable<?, ?> nodes) // the values become the nodes

这些构造器不是特别有用。它们仅仅是创建出一个包含了若干裸树的森林,其中每.

棵树只有一个节点。第三个构造器显得特别没用,因为这些节点实际的显示次序是由键

的散列码确定的。

怎样才能获得-一个树模型呢?可以通过创建一个实现了TreeMode1 接口的类来构建自

己的树模型。在本章的后面部分,将会介绍应该如何实现。现在,我们仍坚持使用Swing类

库提供的Defau1tTreeMode1模型。

为了构建一-个默认的树模型,必须提供- -个根节 点。

TeelNode root =.
DefaultTreeModel mode1 = new DefaultTreeMode1(root);

TreeNode是另外- -个接口。 可以将任何实现了这个接口的类的对象组类到默认的树模型

中。这里,我们使用的是Swing提供的具体节点类,叫做Defaul tMutableTreeNode。这个

类实现了MutableTreeNode接口,该接口是TreeNode的一个子接口(参见图6-17)。

任何一个默认的可变树节点都存放一个对象,即用户对象(user object)。树会

为所有的节点绘制这些用户对象。除非指定一个绘制器,否则树将直接显示执行完

toString方法之后的结果字符串。在第一个示例程序中,我们使用了字符

串作为用户对象。实际应用中,通常会在树中组装更具表现力的用户对象。例如,当显

示一个目录树时,将Fi1e对象用于节点将具有实际意义。

可以在构造器中设定用户对象,也可以稍后在setUserobject方法中设定用户对象:

DefaultMutableTeelode node ■new DeultutableTeode('Texas);
node. setUserobect("alifornia");

新梦想IT职业教育

接下来,可以建立节点之间的父/子关系。从根节点开始,使用add方法来添加子节点:

DefaultutableTreeNode root = new Defaul tMutableTreeNode("World");
DefaultlutableTreeNode country = new DefaultutableTeelode(C"USA');
root . add(country);
DefaultMutableTreeNode state = new Defaul tutableTeeode("Califormia");
country. add(state);

图6-18显示了这棵树的外观。

按照这种方式将所有的节点链接起来。然后用根节点构建一个DefaultTreeMode1。最后,用这个树模型构建一个

Jtree。

DefatTreeModel treeModel ■new DefaultTreeModel (root);
JTree tree = new JrereModel);

或者,使用快捷方式,直接将根节点传递给Jtree构造器。那么这棵树就会自动构建-一个默认的树模型:

JTree tree = new Jee(root);



新梦想IT职业教育


相关内容

文章评论

表情

共 0 条评论,查看全部
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~