详解Swing中JTree组件的功能
JTree组件是另外一个复杂组件,它不像 JTable 那样难用,但是也不像 JList 那么容易。使用 JTree 时麻烦的部分是它要求的数据模型。
JTree组件的功能来自树的概念,树有分支和叶子。您在 Windows 中使用 IE 浏览器时,可能非常熟悉这个概念 —— 可以展开和折叠分支,显示可以选择和取消选择的不同叶子。
您很有可能发现树在应用程序中不像表格或列表那样有用,所以在 Internet 上没有许多有帮助的这方面的示例。实际上,像 JTable 一样,JTree 没有什么入门级的功能。如果决定使用 JTree,那么立即就可以达到中级水平,当然还必须学习随之而来的概念。因此,示例应用程序没有介绍 JTree,所以也很不幸,不管是入门教程还是中级教程,都没有涉及这个不太流行的组件。
但是,树有一些时候是符合需求的合理的 UI 组件。文件/目录系统就是一个示例(就像在 IE 浏览器中那样),而且当数据采取层次结构的时候,也就是说数据采用树的形式的时候,JTree组件就是最佳组件。
在 Swing 中,JTree组件看起来如下所示:
- import java.awt.Dimension;
- import java.awt.Color;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- import javax.swing.JScrollPane;
- import javax.swing.JTree;
- import javax.swing.BoxLayout;
- import javax.swing.tree.TreePath;
- import javax.swing.tree.DefaultMutableTreeNode;
- import javax.swing.tree.DefaultTreeModel;
- public class JTreeDemo
- {
- public static void main (String[] args)
- {
- //构造函数:JTree()
- JTree example1 = new JTree();
- //构造函数:JTree(Object[] value)
- Object[] letters= {"a", "b", "c", "d", "e"};
- JTree example2 = new JTree (letters);
- //构造函数:JTree(TreeNode root)(TreeNode空)
- //用空结点创建树
- DefaultMutableTreeNode node1 = new DefaultMutableTreeNode();
- //定义树结点
- JTree example3 = new JTree (node1);
- //用此树结点做参数调用 JTree的构造函数创建含有一个根结点的树
- //构造函数:JTree(TreeNode root)(同上,只是TreeNode非空)
- //用一个根结点创建树
- DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("Color");
- JTree example4 = new JTree (node2);//结点不可以颜色,默认为白面黑字
- example4.setBackground (Color.lightGray);
- //构造函数:JTree(TreeNode root, boolean asksAllowsChildren)
(同上,只是TreeNode又有不同) - //使用DefaultMutableTreeNode类先用一个根结点创建树,
设置为可添加孩子结点,再添加孩子结点 - DefaultMutableTreeNode color = new DefaultMutableTreeNode
("Color", true); - DefaultMutableTreeNode gray = new DefaultMutableTreeNode
("Gray"); - color.add (gray);
- color.add (new DefaultMutableTreeNode ("Red"));
- gray.add (new DefaultMutableTreeNode ("Lightgray"));
- gray.add (new DefaultMutableTreeNode ("Darkgray"));
- color.add (new DefaultMutableTreeNode ("Green"));
- JTree example5 = new JTree (color);
- //构造函数:JTree(TreeNode root)(同上,只是TreeNode非空)
- //通过逐个添加结点创建树
- DefaultMutableTreeNode biology = new DefaultMutableTreeNode ("Biology");
- DefaultMutableTreeNode animal = new DefaultMutableTreeNode ("Animal");
- DefaultMutableTreeNode mammal = new DefaultMutableTreeNode ("Mammal");
- DefaultMutableTreeNode horse = new DefaultMutableTreeNode ("Horse");
- mammal.add (horse);
- animal.add (mammal);
- biology.add (animal);
- JTree example6 = new JTree (biology);
- horse.isLeaf();//if this node allows children.
- horse.isRoot();//true if this node is the root of its tree
- //构造函数:JTree(TreeModel newModel)
- //用DefaultMutableTreeNodel类定义一个结点再用这个结点做参数定义一个用DefaultTreeMode
- //创建一个树的模型,再用JTree的构造函数创建一个树
- DefaultMutableTreeNode root = new DefaultMutableTreeNode ("Root1");
- DefaultMutableTreeNode child1 = new DefaultMutableTreeNode ("Child1");
- DefaultMutableTreeNode child11 = new DefaultMutableTreeNode ("Child11");
- DefaultMutableTreeNode child111 = new DefaultMutableTreeNode ("Child111");
- DefaultMutableTreeNode child1111 = new DefaultMutableTreeNode ("Child1111");
- root.add (child1); child1.add (child11);
- child11.add (child111);child111.add(child1111);
- DefaultTreeModel model = new DefaultTreeModel (root);
- JTree example7 = new JTree (model);
- JPanel panel = new JPanel();
- panel.setLayout (new BoxLayout (panel, BoxLayout.X_AXIS));
- panel.setPreferredSize (new Dimension (700, 400));
- panel.add (new JScrollPane (example1));//JTree必须放在JScrollPane上
- panel.add (new JScrollPane (example2));
- panel.add (new JScrollPane (example3));
- panel.add (new JScrollPane (example4));
- panel.add (new JScrollPane (example5));
- panel.add (new JScrollPane (example6));
- panel.add (new JScrollPane (example7));
- JFrame frame = new JFrame ("JTreeDemo");
- frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
- frame.setContentPane (panel);
- frame.pack();
- frame.show();
- }
- }
详解Swing中JTree组件的功能的更多相关文章
- 详解Android中的四大组件之一:Activity详解
activity的生命周期 activity的四种状态 running:正在运行,处于活动状态,用户可以点击屏幕,是将activity处于栈顶的状态. paused:暂停,处于失去焦点的时候,处于pa ...
- 用IDEA详解Spring中的IoC和DI(挺透彻的,点进来看看吧)
用IDEA详解Spring中的IoC和DI 一.Spring IoC的基本概念 控制反转(IoC)是一个比较抽象的概念,它主要用来消减计算机程序的耦合问题,是Spring框架的核心.依赖注入(DI)是 ...
- 详解Vue中的computed和watch
作者:小土豆 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.cn/user/2436173500265335 1. 前言 作为一名Vue ...
- 【转】详解C#中的反射
原帖链接点这里:详解C#中的反射 反射(Reflection) 2008年01月02日 星期三 11:21 两个现实中的例子: 1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内 ...
- 详解Webwork中Action 调用的方法
详解Webwork中Action 调用的方法 从三方面介绍webwork action调用相关知识: 1.Webwork 获取和包装 web 参数 2.这部分框架类关系 3.DefaultAction ...
- java 乱码详解_jsp中pageEncoding、charset=UTF -8"、request.setCharacterEncoding("UTF-8")
http://blog.csdn.net/qinysong/article/details/1179480 java 乱码详解__jsp中pageEncoding.charset=UTF -8&quo ...
- 详解Python中re.sub--转载
[背景] Python中的正则表达式方面的功能,很强大. 其中就包括re.sub,实现正则的替换. 功能很强大,所以导致用法稍微有点复杂. 所以当遇到稍微复杂的用法时候,就容易犯错. 所以此处,总结一 ...
- (转)详解Linux中SSH远程访问控制
详解Linux中SSH远程访问控制 原文:http://blog.51cto.com/dengqi/1260038 SSH:是一种安全通道协议,主要用来实现字符界面的远程登录,远程复制等功能(使用TC ...
- 详解javascript中的this对象
详解javascript中的this对象 前言 Javascript是一门基于对象的动态语言,也就是说,所有东西都是对象,一个很典型的例子就是函数也被视为普通的对象.Javascript可以通过一定的 ...
随机推荐
- 响应HttpServletResponse
可以使用HttpServletResponse来对浏览器进行响应,大部分情况下,会使用setContentType()设置响应类型,使用getWriter()取得PrintWriter对象,而后使用P ...
- 在DataTable数据类型最后增加一列,列名为“Column”,内容都为“AAA”
DataTable dt = new DataTable(); dt.Columns.Add("Column", typeof(string)); foreach (DataRow ...
- Spring @Aspect实现切面编程
参考:http://blog.csdn.net/cdl2008sky/article/details/6268628 参考:http://www.360doc.com/content/12/0602/ ...
- redis内存占用说明
执行info命令后,找到Memory这一栏,就可以看到内存的使用信息了,如下图: # Memory used_memory:13490096 //数据占用了多少内存(字节) used_memory_h ...
- 玩转spring boot——结合阿里云持续交付
前言 在互联网项目中,项目测试.部署往往需要花费大量时间.传统方式是在本地打包.测试完毕程序,然后通过ftp上传至服务器,再把测试的配置文件修改为生产环境的配置文件,最后重新运行服务.这一过程如果交给 ...
- ubuntu linux 中安装 mysql
三种安装方式: 1. 从网上安装 sudo apt-get install mysql-server.装完已经自动配置好环境变量,可以直接使用mysql的命令. 注:建议将/etc/apt/sourc ...
- ArcGIS制图表达Representation实战篇1-边界线和行道树制作
ArcGIS制图表达Representation实战篇1-边界线和行道树制作 by 李远祥 即便是有了一些制图表达的基础,很多人还是对ArcGIS制图表达理解停留在表面,因为没有实际的强化训练是很难体 ...
- Tooltip浮动提示框效果(掌握里面的小知识)
使用原生JavaScript设计和实现Tooltip浮动提示框特效,了解代码简化.事件绑定.事件冒泡等技巧和知识. 特效四个关键点:显示:鼠标移到ToolTip超链接上时,ToolTip提示框可以显示 ...
- view里面的tableview顶部被view的导航栏盖住了的问题
在你要显示的控制器的viewDidLoad中添加代码 self.edgesForExtendedLayout = UIRectEdgeNone; 另外记住tableView要遵循代理cell才能显示. ...
- 爬虫之爬取网贷之家在档P2P平台基本数据并存入数据库
python 版本 :3.5.2 Jupyter Notebook 使用库: reuqests (For human) json (用来加载JSON数据) datetime (用来记录抓取所花时间,也 ...