java 树节点监听器_JTree使用实例

如何使用Jtree

利用JTree类,你可以显示等级体系的数据。一个JTree对象并没有包含实际的数据;它只是提供了数据的一个视图。像其他非平凡的(nontrivial)Swing组件一样,这种Jtree通过查询她的数据模型获得数据。

Jtree垂直显示它的数据。树中显示的每一行包含一项数据,称之为节点(node)。每颗树有一个根节点(root node),其他所有节点是它的子孙。默认情况下,树只显示根节点,但是你可以设置改变默认显示方式。一个节点可以拥有孩子也可以不拥有任何子孙。我们称那些可以拥有孩子(不管当前是否有孩子)的节点为“分支节点”(branch nodes),而不能拥有孩子的节点为“叶子节点”(leaf nodes)。

分支节点可以有任意多个孩子。通常,用户可以通过点击实现展开或者折叠分支节点,使得他们的孩子可见或者不可见。默认情况下,除了根节点以外的所有分支节点默认呈现折叠状态。程序中,通过监听 tree expansion 或者 tree-will-expand事件可以检测分支节点的展开状态。监听事件在下面两节内容中描述How to Write a Tree Expansion Listener and How to Write a Tree-Will-Expand Listener.

在树中,一个节点可以通过TreePath(一个囊括该节点和他所有祖先节点的路径对象)或者他的折叠行来识别。

展开节点(expanded node)就是一个非叶子节点,当他的所有祖先都展开时,他将显示他的孩子。

折叠节点(collapsed node)是隐藏了孩子们得的节点。

隐藏节点(hidden node)就是折叠节点下的一个孩子

创建树

这里是一个应用程序的截图,上半部分展示了一个滚动面板(scroll pane)中的树(Jtree)。

ed5704f0eea29e7a76b8ee275353ca05.png

1 //Where instance variables are declared:

2 privateJTree tree;3 ...4 publicTreeDemo() {5 ...6 DefaultMutableTreeNode top = new DefaultMutableTreeNode("The Java Series");7 createNodes(top);8 tree = newJTree(top);9 ...10 JScrollPane treeView = newJScrollPane(tree);11 ...12 }

这段代码创建了一个DefaultMutableTreeNode实例作为根节点。接着创建树中剩下的其他节点。创建完节点后,通过指定刚才创建的根节点为JTree构造函数的参数,创建一棵树。最后,将树放到滚动面板中,这是一个通常的策略,因为需要显示完一个树,而展开树需要另外比较大的空间。

以下代码创建根节点以下的节点

1 private voidcreateNodes(DefaultMutableTreeNode top) {2 DefaultMutableTreeNode category = null;3 DefaultMutableTreeNode book = null;4

5 category = new DefaultMutableTreeNode("Books for Java Programmers");6 top.add(category);7

8 //original Tutorial

9 book = new DefaultMutableTreeNode(newBookInfo10 ("The Java Tutorial: A Short Course on the Basics",11 "tutorial.html"));12 category.add(book);13

14 //Tutorial Continued

15 book = new DefaultMutableTreeNode(newBookInfo16 ("The Java Tutorial Continued: The Rest of the JDK",17 "tutorialcont.html"));18 category.add(book);19

20 //JFC Swing Tutorial

21 book = new DefaultMutableTreeNode(newBookInfo22 ("The JFC Swing Tutorial: A Guide to Constructing GUIs",23 "swingtutorial.html"));24 category.add(book);25

26 //...add more books for programmers...

27

28 category = new DefaultMutableTreeNode("Books for Java Implementers");29 top.add(category);30

31 //VM

32 book = new DefaultMutableTreeNode(newBookInfo33 ("The Java Virtual Machine Specification",34 "vm.html"));35 category.add(book);36

37 //Language Spec

38 book = new DefaultMutableTreeNode(newBookInfo39 ("The Java Language Specification",40 "jls.html"));41 category.add(book);42 }

DefaultMutableTreeNode构造函数的参数是一个用户自定义的类对象,它包含或指向了关联树节点的数据。这个用户对象可以是一个字符串,或者是一个自定义的类。如果它实现了一个自定义对象,你应该要重新实现覆盖他的toString方法,这样他才能返回对应字符串作为节点显示的字符串。Jtree默认情况下,每个节点都是用toString的返回值作为显示。所以,让toString返回一些有意义的值是很重要的。有时候,覆盖toString方法是不可行的;在某些场景你可以通过重写Jtree的convertVa

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值