12.10.3 监听节点事件
12.10.3 监听节点事件
JTree
专门提供了一个TreeSelectionModel
对象来保存该JTree
选中状态的信息。也就是说,JTree
组件背后隐藏了两个model
对象,其中TreeModel
用于保存该JTree
的所有节点数据,而TreeSelectionModel
用于保存该JTree
的所有选中状态的信息
TreeSelectionModel
对于大部分开发者而言,无须关心TreeSelectionModel
的存在,程序可以通过JTree
提供的getSelectionPath()
方法和getSelectionPaths
方法来获取该JTree
被选中的TreePath
,但实际上这两个方法底层实现依然依赖于TreeSelectionModel
,只是普通开发者一般无须关心这些底层细节而已。
改变JTree的选择模式
程序可以改变JTree
的选择模式,但必须先获取该JTree
对应的TreeSelectionModel
对象,再调用该对象的setSelectionModel()
方法来设置该JTree
的选择模式。setSelectionMode
方法支持如下三个参数。
TreeSelectionModel_CONTIGUOUS_TREE_SELECTION
:可以连续选中多个TreePath
TreeSelectionModel_DISCONTIGUOUS_TREE_SELECTION
:该选项对于选择没有任何限制。TreeSelectionModel_DISCONTIGUOUS_TREE_SELECTION
:每次只能选择一个TreePath
方法 | 描述 |
---|---|
void setSelectionMode(int mode) |
Sets the selection model, which must be one of SINGLE_TREE_SELECTION, CONTIGUOUS_TREE_SELECTION or DISCONTIGUOUS_TREE_SELECTION. |
与JList
操作类似,按下Ctrl辅助键,用于添加选中多个JTree
节点:按下Shift
辅助键,用于选择连续区域里的所有JTree
节点。
方法 | 描述 |
---|---|
void addTreeExpansionListener(TreeExpansionListener tel) |
添加树节点展开/折叠事件的监听器 |
void addTreeSelectionListener(TreeSelectionListener tsl) |
添加树节点选择事件的监听器 |
程序
下面程序设置JTree
只能选择单个TreePath
,并为节点选择事件添加事件监听器。
1 | import javax.swing.*; |
上面程序中设置了该JTree
对象采用SINGLE_TREE_SELECTION
选择模式,即每次只能选中该JTree
的一个TreePath
。第二段粗体字代码为该JTree
添加了个节点选择事件的监听器,当该JTre
中被选择节点发生改变时,该监听器就会被触发。运行上面程序,会看到如图12.43所示的效
果。
不要通过监听鼠标事件来监听所选节点的变化,因为JTree
中节点的选择完全可以通过键盘来操作,不通过鼠标单击亦可