树节点监听节点改变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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 在京东买东西坏了商家不退货怎么办 苯扎氯铵溶液不小心喝了一口怎么办 苯扎氯铵溶液没有稀释就用了怎么办 牛油果切开了但是没熟怎么办 手机安装程序时解析包出错怎么办 因俩人不合适分手了很难受怎么办 中考结束后成绩不好的该怎么办 在京东自营药房买药没有处方怎么办 平安普惠账号不可以注销怎么办? 京东购物非自营货没到降价了怎么办 实体店商家不承认卖的是假货怎么办 衣服上的装饰圆扣掉下来了怎么办 没在京东买东西却收到退款怎么办 小米分期付款买的手机不要了怎么办 唯品会在线支付后商品有问题怎么办 红米手机把时间删了怎么办 红米桌面上的时间删了怎么办 华为手机玩游戏老是闪退怎么办 别人家无线网距离太远信号差怎么办 微信公众号交话费交错了怎么办 手机卡里还有话费销户的话怎么办 号码忘记交话费变成空号怎么办 多屏互动没办法隔空播放怎么办? 一个人长期受一件事的打击怎么办 物流信息显示快递被别人签收怎么办 现在打工的人被领导骂怎么办 加密狗丢了打不开软件了怎么办 手机微信可以打开网页打不开怎么办 手机中国网打开网速慢该怎么办 在韩国用中国软件网速特别慢怎么办 淘宝退货快递一直没显示到货怎么办 高二美术生集训时文化课怎么办 唯品会不支持7天无理由退货怎么办 sy来4am了孤存怎么办 淘宝网买的电器坏了怎么办 在闲鱼上买的电器是坏的怎么办 打开时全屏不知变成小屏怎么办 苹果6s原装数据线不充电怎么办 vivo手机安卓系统耗电快怎么办 电视机机顶盒插了电源开不了怎么办 苹果手机更新系统后老是闪退怎么办