DefaultMutableTreeNode root = new MyMutableTreeNode(new MyData("ddd",0));
                DefaultMutableTreeNode leafnode=new DefaultMutableTreeNode(new MyData("1",1));
                root.add(leafnode);
                leafnode=new DefaultMutableTreeNode(new MyData("2",1));
                root.add(leafnode);
                m_treeModel = new MyTreeModel(root);
                m_tree = new JTree(m_treeModel);
                m_tree.setEditable(true);MyData的定义如下
class MyData extends Object
{
        public String m_itemName;
        public int m_iType;        public MyData(String newString,int iType)
        {
                m_itemName = newString;
                m_iType = iType;
        }        public String toString()
        {
                return m_itemName;
        }
}
如何实现当编辑节点值回车时修改MyData的m_itemName属性为用户输入的值
大家帮忙看看啊

解决方案 »

  1.   

    处理节点的选种消息
    m_tree.addTreeSelectionListener(this);
    public void valueChanged(TreeSelectionEvent e)
            {//TreeSelectionListener
                    DefaultMutableTreeNode node = (DefaultMutableTreeNode)m_tree.getLastSelectedPathComponent();                if (node == null) return;                Object nodeInfo = node.getUserObject();
                    m_textArea.setText(((MyData)nodeInfo).m_itemName+((MyData)nodeInfo).m_iType);
            }
    在运行过程中编辑修改过的节点报错如下
    D:\wsqd\jdk\bin>java SortEditor
    java.lang.ClassCastException
            at SortEditor.valueChanged(SortEditor.java:131)
            at javax.swing.JTree.fireValueChanged(JTree.java:2392)
            at javax.swing.JTree$TreeSelectionRedirector.valueChanged(JTree.java:276
    3)
            at javax.swing.tree.DefaultTreeSelectionModel.fireValueChanged(DefaultTr
    eeSelectionModel.java:629)
            at javax.swing.tree.DefaultTreeSelectionModel.notifyPathChange(DefaultTr
    eeSelectionModel.java:1076)
            at javax.swing.tree.DefaultTreeSelectionModel.setSelectionPaths(DefaultT
    reeSelectionModel.java:287)
            at javax.swing.tree.DefaultTreeSelectionModel.setSelectionPath(DefaultTr
    eeSelectionModel.java:170)
            at javax.swing.JTree.setSelectionPath(JTree.java:1168)
            at javax.swing.plaf.basic.BasicTreeUI.selectPathForEvent(BasicTreeUI.jav
    a:2215)
            at javax.swing.plaf.basic.BasicTreeUI$MouseHandler.handleSelection(Basic
    TreeUI.java:2863)
            at javax.swing.plaf.basic.BasicTreeUI$MouseHandler.mousePressed(BasicTre
    eUI.java:2824)
            at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:22
    2)
            at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:22
    1)
            at java.awt.Component.processMouseEvent(Component.java:5097)
            at java.awt.Component.processEvent(Component.java:4897)
            at java.awt.Container.processEvent(Container.java:1569)
            at java.awt.Component.dispatchEventImpl(Component.java:3615)
            at java.awt.Container.dispatchEventImpl(Container.java:1627)
            at java.awt.Component.dispatchEvent(Component.java:3477)
            at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483
    )
            at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3195)        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
            at java.awt.Container.dispatchEventImpl(Container.java:1613)
            at java.awt.Window.dispatchEventImpl(Window.java:1606)
            at java.awt.Component.dispatchEvent(Component.java:3477)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:480)
            at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTh
    read.java:201)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
    ad.java:151)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)        at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)我该怎么处理节点的编辑消息?
      

  2.   

    经过验证得知报错的原因在于在结束编辑后当前选择的树节点的getUserObject()不再是MyData,而是String.难道时我漏处理了一些消息?请高手指点
      

  3.   

    找到方法
    需要自定义一个
    class MyTreeModel extends DefaultTreeModel
    {
            public MyTreeModel(TreeNode newRoot)
            {
                    super(newRoot);
            }         /**
             * Subclassed to message setString() to the changed path item.
            */
            public void valueForPathChanged(TreePath path, Object newValue)
            {
            /* Update the user object. */
            DefaultMutableTreeNode      aNode = (DefaultMutableTreeNode)path.getLastPathComponent();
            MyData    sampleData = (MyData)aNode.getUserObject();         sampleData.setString((String)newValue);         /* Since we've changed how the data is to be displayed, message
            nodeChanged. */
            nodeChanged(aNode);
            }}
     m_treeModel = new MyTreeModel(root);
    即可完成对树的编辑功能
    结帖