swing树的节点事件监听
监听结点事件 修改JTree的选择模式: JTree专门提供了一个TreeSelectionModel对象来保存该JTree选中状态的信息。也就是说,JTree组件背后隐藏了两个model对象,其中TreeModel用于保存该JTree的所有节点数据 而TreeSelectionModel用于保存该JTree的所有选中状态的信息
程序可以改变JTree的选择模式 但必须先获取该JTree对应的TreeSelectionMode1对象,再调用该对象的setSelectionMode(int mode)方法来 设置该JTree的选择模式,其中model可以有如下3种取值: 1、TreeSelectionModel.CONTIGUOUS_TREE_SELECTION:可以连续选中多个TreePath 2、TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION:该选项对于选择没有任何限制 3、TreeSelectionModel.SINGLE_TREE_SELECTION:每次只能选择一个TreePath
为JTree添加监听器: 1、addTreeExpansionListener(TreeExpansionListener tel):添加树节点展开/折叠事件的监听器 2、addTreeSelectionListener(TreeSelectionListener tsl):添加树节点选择事件的监听器
package ch30;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
//可以实现监听用于点击了某个节点,且在文本域输出用户点击的这个节点
//TreeSelectionModel对象:保存该节点的选中状态的信息
public class a_27_swing_树_JTree节点事件监听 {
//创建一个窗口
JFrame jf = new JFrame("监听树的选择事件");
//创建多个节点
DefaultMutableTreeNode root = new DefaultMutableTreeNode("中国");
DefaultMutableTreeNode guangdong = new DefaultMutableTreeNode("广东");
DefaultMutableTreeNode guangxi = new DefaultMutableTreeNode("广西");
DefaultMutableTreeNode foshan = new DefaultMutableTreeNode("佛山");
DefaultMutableTreeNode shantou = new DefaultMutableTreeNode("汕头");
DefaultMutableTreeNode guilin = new DefaultMutableTreeNode("桂林");
DefaultMutableTreeNode nanning = new DefaultMutableTreeNode("南宁");
//创建了一个文本域对象,用于展示用户点击节点后,我们返回的数据
JTextArea eventTxt = new JTextArea(5, 20);
public void init() {
//广东和广西是中国的子节点
root.add(guangdong);
root.add(guangxi);
//佛山和汕头是广东的子节点
guangdong.add(foshan);
guangdong.add(shantou);
//桂林和南宁是广西的子节点
guangxi.add(guilin);
guangxi.add(nanning);
//依据根结点,创建JTree。即中国root是根节点
JTree tree = new JTree(root);
tree.setShowsRootHandles(true);
tree.setRootVisible(true);
//--------------------------------------------------------------------------------------------------
//设置选择模式
TreeSelectionModel selectionModel = tree.getSelectionModel();
selectionModel.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);//只允许用户对节点进行单选
//设置监听器,用Lambda表达式写,或者用new一个实现类对象的写法也是可以的,这里用Lambda表达式
tree.addTreeSelectionListener(e -> {
//获取用户点击的节点的路径,并把路径转为字符串类型,显示在文本域eventTxt里面。\n是换行的意思
TreePath newLeadSelectionEvent = e.getNewLeadSelectionPath();
//把信息输出在文本域
eventTxt.append("你点击了: "+newLeadSelectionEvent.toString() + "\n"+"----------------------------"+"\n");
});
//组装窗口
Box box = Box.createHorizontalBox();
box.add(new JScrollPane(tree));
box.add(new JScrollPane(eventTxt));
jf.add(box);
//设置窗口的最佳大小,设置窗口可见,设置点击叉号就退出程序
jf.pack();
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new a_27_swing_树_JTree节点事件监听().init();
}
}