在jtree上可能有两个节点的名字一样,而且他们的父节点也一样,这样,它们的treepath也一样,
那用什么来标识这个节点,到现在没有想到办法!!
还望高手赐教!

解决方案 »

  1.   

    getLastComponent取得最后一个节点
    好象是TreePath里面的
      

  2.   

    一个 DefaultMutableTreeNode 好像有个 UserObject 你可以用这个来存储 ID.
      

  3.   

    1、可以先定义一个类,如下所示:
    class MyObject{
        public static int number = 0;
        public String name = null;
        //节点显示的字符串
        public String caption = null;
        //标明节点唯一性
        public int id = 0;
        
        public MyObject(String name,String caption){
            this.name = name;
            this.caption = caption;
            this.id = number++;
        }    //显示该类时调用该方法
        public String toString(){
           return caption;
        }
    }
    2、创建节点:
    DefaultMutableTreeNode node = new DefaultMutableTreeNode(new MyObject("my name","my caption"));
    3、辨别节点唯一性:
    可以根据id或name判断节点的唯一性
      

  4.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.tree.*;
    import com.incors.plaf.alloy.*;
    import com.incors.plaf.alloy.themes.bedouin.*;public class TreeDemo5 implements TreeModelListener
    {
        JLabel label = null;
        String nodeName = null; //原有节点名称
        
        public TreeDemo5()
        {
            try {
             AlloyLookAndFeel.setProperty("alloy.isLookAndFeelFrameDecoration", "true");
             AlloyTheme theme = new BedouinTheme();//设置界面的外观,手册中共有5种样式
             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);
                }
            });    }