(swing读书笔记)JTree简介(中)
(swing读书笔记)JTree简介(中)
By cszhao1980
三.TreeModel(树模型)
同JTable相比,TreeModel接口显得不那么重要。这是Tree的特殊性造成的——TreeNode实现Tree的物理结构。因此,TreeModel接口中最重要的作用就是跟踪Tree的根节点了。
方法摘要 |
|
Object |
getRoot() |
boolean |
isLeaf(Object node) |
void |
addTreeModelListener(TreeModelListener l) |
Object |
getChild(Object parent, int index) |
int |
getChildCount(Object parent) |
int |
getIndexOfChild(Object parent,Object child) |
void |
removeTreeModelListener(TreeModelListener l) |
void |
valueForPathChanged(TreePath path,Object newValue) |
Swing定义了DefaultTreeModel实现TreeModel接口,它还额外实现了许多方法:
boolean |
asksAllowsChildren() |
void |
setAsksAllowsChildren(boolean newValue) |
void |
setRoot(TreeNode root) |
TreeNode[] |
getPathToRoot(TreeNode aNode) |
protected TreeNode[] |
getPathToRoot(TreeNode aNode, int depth) |
|
insertNodeInto |
|
removeNodeFromParent |
值得一提的是TreeModelEvent,在节点更改、插入或移除时会触发此事件。
此时,Tree节点的修改已经完成:
(1) 即如果是添加的话,新添加节点已经添加好;
(2) 删除的话,已经被删除(通过该节点的getParent()无法得到父节点了,可以通过e.getPath()得到“原父节点”)
方法摘要 |
|
Object[] |
getPath() |
int[] |
getChildIndices() |
Object[] |
getChildren() |
TreePath |
getTreePath() |
【注】:除了ModelStructure整个改变之外,TreeModelEvent仅支持一个节点的修改(修改、删除、添加)。
当我们选取多个节点进行操作时,其实是依次激发多个TreeModelEvent。
四.TreeSelectionModel(树选取模型)
接口TreeSelectionModel的JAVA help描述如下:
此接口表示树选择组件的当前状态。有关使用树选择模型的信息和示例,请参阅 The Java Tutorial 中的How to Use Trees 一节。 树选择的状态由 TreePath 集合描述,也可以是整数集合。从 TreePath 到整数的映射通过 RowMapper 实例的方式完成。TreeSelectionModel 不一定具有 RowMapper 才可以正确地操作,但是,没有 RowMapper 的情况下,getSelectionRows 将返回 null。 可以将 TreeSelectionModel 配置为只允许一条路径 (SINGLE_TREE_SELECTION)、多条连续路径 (CONTIGUOUS_TREE_SELECTION) 或多条不连续的路径 (DISCONTIGUOUS_TREE_SELECTION)。RowMapper 用于确定 TreePath 是否为连续。没有 RowMapper 时,CONTIGUOUS_TREE_SELECTION 和 DISCONTIGUOUS_TREE_SELECTION 的功能相同,即都允许在 TreeSelectionModel 中包含任何数量的路径。 对于 CONTIGUOUS_TREE_SELECTION 选择模型,路径在任何时候更改时(通过 setSelectionPath、addSelectionPath ...),都将重新检查 TreePath,以使它们保持连续。通过调用 resetRowSelection,也可以强制检查 TreePath。如何将一组不连续的 TreePath 映射到连续集合要通过此实例的实现者强制执行特定的策略来完成。 实现应对添加到该选择中的重复 TreePath 进行组合。例如,以下代码 TreePath[] paths = new TreePath[] { treePath, treePath }; treeSelectionModel.setSelectionPaths(paths); 会导致仅选择一个路径:treePath,而不是 treePath 的两个副本。 前导 TreePath 是添加(或设置)的最后一个路径。前导行则是对应于 TreePath 的行,由 RowMapper 确定。 |
重要的方法有:
void |
addPropertyChangeListener(PropertyChangeListener listener) |
void |
addTreeSelectionListener(TreeSelectionListener x) |
void |
addSelectionPath(TreePath path) |
void |
addSelectionPaths(TreePath[] paths) |
int |
getSelectionMode() |
TreePath |
getSelectionPath() |
TreePath[] |
getSelectionPaths() |
void |
clearSelection() |
TreePath |
getLeadSelectionPath() |
Swing提供了默认的接口实现——DefaultTreeSelectionModel。
五.JTree
5.1.JTree的构造
通常有两种方式:
(1) 通过构造TreeNode,然后使用TreeNode来构造JTree;
JTree() |
JTree(TreeModel newModel) |
JTree(TreeNode root) |
JTree(TreeNode root, boolean asksAllowsChildren) |
比如:
使用无参数的构造函数,然后再使用setRoot()方法设置Root TreeNode;
使用TreeNode构造TreeModel,然后,使用TreeModel构造JTree;
直接使用Root TreeNode 构造Tree。
(2) 使用Object[]、Vector、Hashtable直接构造
JTree(Hashtable<?,?> value) |
JTree(Object[] value) |
JTree(Vector<?> value) |
5.2.JTree的方法
JTree中含有大量方法,尽管很多都属于外观模式的方法——它会委托给它的各种模型来完成真正的操作。
很多方法都很有用,如:
- isRootVisible()
- setRootVisible(boolean)
- setShowsRootHandles(boolean) 节点句柄——绘制在根节点左侧的“小钥匙”
还有些属于坐标<———>Tree转换的方法,如:
- public TreePath getPathForLocation(int x, int y)
- public int getRowForLocation(int x, int y)
- public TreePath getClosestPathForLocation(int x, int y)
- public int getClosestRowForLocation(int x, int y)
Row<———>Tree转换的方法,如:
- public TreePath getPathForRow(int row)
(swing读书笔记)JTree简介(中)相关推荐
- (swing读书笔记)JTree简介(下)
(swing读书笔记)JTree简介(下) By cszhao1980 六.TreeCellRenderer 通过JTable一样,JTree也使用一个接口定义它的单元绘制器,该接口仅有一个方法: C ...
- (swing读书笔记)JTree简介(上)
(swing读书笔记)JTree简介(上) By cszhao1980 同JTable类似,JTree也是一个负责的组件,其周围也有大量附属接口.类,如下图所示: 一.TreeNode(树节点) Tr ...
- (swing读书笔记)JTable简介(中)
(swing读书笔记)JTable简介(中) by cszhao1980 五.TableCellRenderer JTable将Cell的绘制工作委托给CellRenderer来完成--如果我们没有显 ...
- (swing读书笔记)JTable简介(下)
(swing读书笔记)JTable简介(下) by cszhao1980 六.Row 最初,JTable没有提供任何"Row"相关的类来控制Row,与Row相关的大量操作直接坐落在 ...
- (swing读书笔记)JTable简介(上)
(swing读书笔记)JTable简介(上) by cszhao1980 JTable是Swing中最复杂的组件之一.在JTable周围,环绕着JTableHeader.TableModel.Tabl ...
- swing读书笔记转载
(swing读书笔记)Swing Look And Feel(1) http://blog.csdn.net/cszhao1980/article/details/7343524 (swing读书笔记 ...
- (swing读书笔记)Swing Look And Feel(1)
(swing读书笔记)Swing Look And Feel(1) By cszhao1980 Swing出现之初,就提供一种非常前卫的功能,即PLAF--可拔插的Look And Feel,我们可以 ...
- (swing读书笔记)Swing Look And Feel(2)
(swing读书笔记)Swing Look And Feel(2) By cszhao1980 三. UI defaults UIDefaults内部维护了一张巨大的Hashtable, 记 ...
- (swing读书笔记)Swing Look And Feel(4)
(swing读书笔记)Swing Look And Feel(4) By cszhao1980 八.MetalLookAndFeel的功能增强 Swing对它默认的跨平台L&F提供了功能的增强 ...
最新文章
- Paper之BigGAN:ICLR 2019最新论文《LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS》(未完待续)
- LVM---基本创建和使用
- ZEN CART 在LINUX系统下设置邮箱方法---用GMAIL设置,方法选择SMTPAUTH
- iOS发展系列II - UILabel 使用摘要
- Excel、Exchange 和 C# (摘要)
- python经典算法--------冒泡排序
- python unittest断言_python接口自动化(二十四)--unittest断言——中(详解)
- 3大AI事件入围百度2017科技热搜,柯洁对战AlphaGo排名第一
- 在sqlserver sql语句中查找速度快
- win10计算机怎么计算根号,详细介绍win10系统自带的计算器的功能,经验告诉你该这样...
- AWS、Azure等国外云计算如何迁移到国内阿里云上?
- 互联网广告行业(01)------ 初识了解DSP、SSP、ADX
- 2020FME博客大赛——基于FME利用高德路径规划AP实现公共服务设施可达性分析——以厦门山海健康步道为例
- 30岁的女程序员该何去何从
- Kotlin读书笔记之函数式kotlin
- echarts:在vue中使用渐变色
- 明日之后维尔市服务器找不到,明日之后 最新服务器互通计划来袭,快来看看有你们的服务器吗?...
- 计算机启动显示不正确的分区表,每次开机提示invalid partition table怎么解决?
- 智慧建造管理平台施工现场视频监控系统
- 安卓图表引擎AChartEngine(三) - 示例源码折线图、饼图和柱状图