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:可以连续选中多个TreePathTreeSelectionModel_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中节点的选择完全可以通过键盘来操作,不通过鼠标单击亦可