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(); }}