树节点监听节点改变Demo
来源:互联网 发布:unity3d流血特效 编辑:程序博客网 时间:2024/06/04 23:13
/* * @(#)NewClass.java2016-08-04 * * Copyright 2010 Fiberhome. All rights reserved. */package treetest;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import javax.swing.tree.*;public class TreeDemo5 implements TreeModelListener { JLabel label = null; String nodeName = null; //原有節點名稱 public TreeDemo5() {// try {// // // AlloyLookAndFeel.setProperty("alloy.isLookAndFeelFrameDecoration", "true");// // AlloyTheme theme = new BedouinTheme();//設置界面的外觀,手冊中//// // LookAndFeel alloyLnF = new AlloyLookAndFeel(theme);// // UIManager.setLookAndFeel(alloyLnF);// } catch (UnsupportedLookAndFeelException ex) {// // You may handle the exception here// }// // this line needs to be implemented in order to make JWS work//properly// UIManager.getLookAndFeelDefaults().put("ClassLoader",//getClass().getClassLoader()); JFrame f = new JFrame("TreeDemo"); Container contentPane = f.getContentPane(); DefaultMutableTreeNode root = new DefaultMutableTreeNode("資源管理器"); DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("文件夾"); DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("我的電腦"); DefaultMutableTreeNode node3 = new DefaultMutableTreeNode("收藏夾"); DefaultMutableTreeNode node4 = new DefaultMutableTreeNode("Readme"); root.add(node1); root.add(node2); root.add(node3); root.add(node4); DefaultMutableTreeNode leafnode = new DefaultMutableTreeNode("公司文件"); node1.add(leafnode); leafnode = new DefaultMutableTreeNode("個人信件"); node1.add(leafnode); leafnode = new DefaultMutableTreeNode("私人文件"); node1.add(leafnode); leafnode = new DefaultMutableTreeNode("本機磁盤(C:)"); node2.add(leafnode); leafnode = new DefaultMutableTreeNode("本機磁盤(D:)"); node2.add(leafnode); leafnode = new DefaultMutableTreeNode("本機磁盤(E:)"); node2.add(leafnode); DefaultMutableTreeNode node31 = new DefaultMutableTreeNode("網站列表"); node3.add(node31); leafnode = new DefaultMutableTreeNode("天勤網站"); node31.add(leafnode); leafnode = new DefaultMutableTreeNode("足球消息"); node31.add(leafnode); leafnode = new DefaultMutableTreeNode("網絡書店"); node31.add(leafnode); JTree tree = new JTree(root); tree.setEditable(true);//設置JTree為可編輯的 tree.addMouseListener(new MouseHandle());//使Tree加入檢測Mouse事件,以便取得節點名稱 //下面兩行取得DefaultTreeModel,並檢測是否有TreeModelEvent事件. DefaultTreeModel treeModel = (DefaultTreeModel) tree.getModel(); treeModel.addTreeModelListener(this); JScrollPane scrollPane = new JScrollPane(); scrollPane.setViewportView(tree); label = new JLabel("更改數據為: "); contentPane.add(scrollPane, BorderLayout.CENTER); contentPane.add(label, BorderLayout.SOUTH); f.pack(); f.setVisible(true); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } /*本方法實作TreeModelListener介面,本介面共定義四個方法,分別TreeNodesChanged() *treeNodesInserted()、treeNodesRemoved()、treeNodesRemoved()、 *treeStructureChanged().在此範例中我們只針對更改節點值的部份,因此 只實作 *treeNodesChanged()方法. */ public void treeNodesChanged(TreeModelEvent e) { TreePath treePath = e.getTreePath(); System.out.println(treePath); //下面這行由TreeModelEvent取得的DefaultMutableTreeNode為節點的父節點,而不是用戶點選 //的節點,這點讀者要特別注意。要取得真正的節點需要再加寫下面6行代碼. DefaultMutableTreeNode node = (DefaultMutableTreeNode) treePath.getLastPathComponent(); try { //getChildIndices()方法會返回目前修改節點的索引值。由於我們只修改一個節點,因此節點索引值就放在index[0] //的位置,若點選的節點為root node,則getChildIndices()的返回值為null,程式下面的第二行就在處理點選root //node產生的NullPointerException問題. int[] index = e.getChildIndices(); //由DefaultMutableTreeNode類的getChildAt()方法取得修改的節點對象. node = (DefaultMutableTreeNode) node.getChildAt(index[0]); } catch (NullPointerException exc) { } //由DefaultMutableTreeNode類getUserObject()方法取得節點的內容,或是寫成node.toString()亦相同. label.setText(nodeName + "更改數據為: " + (String) node.getUserObject()); } public void treeNodesInserted(TreeModelEvent e) { } public void treeNodesRemoved(TreeModelEvent e) { } public void treeStructureChanged(TreeModelEvent e) { } public static void main(String args[]) { new TreeDemo5(); } //處理Mouse點選事件 class MouseHandle extends MouseAdapter { public void mousePressed(MouseEvent e) { try { JTree tree = (JTree) e.getSource(); //JTree的getRowForLocation()方法會返回節點的列索引值。例如本例中,“本機磁盤(D:)”的列索引值為4,此索引值 //會隨着其他數據夾的打開或收起而變支,但“資源管理器”的列索引值恆為0. int rowLocation = tree.getRowForLocation(e.getX(), e.getY()); /*JTree的getPathForRow()方法會取得從root node到點選節點的一 條path,此path為一條直線,如程式運行的圖示 *若你點選“本機磁盤(E:)”,則Tree Path為"資源管理器"-->"我的 電腦"-->"本機磁盤(E:)",因此利用TreePath *的getLastPathComponent()方法就可以取得所點選的節點. */ TreePath treepath = tree.getPathForRow(rowLocation); TreeNode treenode = (TreeNode) treepath.getLastPathComponent(); nodeName = treenode.toString(); } catch (NullPointerException ne) { } } }}
0 0
- 树节点监听节点改变Demo
- D3.js实现节点折叠+闪烁+叶节点形状改变的demo
- Zookeeper监听存活节点
- 添加删除 节点demo
- ExtJS -- 改变树节点图标 tree
- OpenStack节点地址改变
- 添加节点删除节点改变颜色等
- zookeeper 进行监听节点机制
- CuratorFramework节点监听一 PathChildrenCache
- CuratorFramework节点监听二 TreeCache
- 节点
- 节点
- 节点
- 节点
- 节点
- 节点
- zookeeper创建目录节点DEMO
- 改变Jtree节点的图标
- POJ 2728 最优比率生成树
- iOS六种传值方式之通知传值
- 《图解番茄工作法》读后感
- 2017校招信息每日汇总(更新至8.4)
- Leetcode006:ZigZag Conversion的Java解法
- 树节点监听节点改变Demo
- AVL树总结
- HDU 5795 A Simple Nim
- RT3070无线网卡STA模式
- HDU 1874 畅通工程续
- 复制构造函数
- Python带index的list输出
- caffe+cuda6.5+cudnn7.0+opencv3.0搭建经验记录
- tomcat eclipse下启动了外部无法访问