Java论坛网»Java技术»JTree如何编辑节点,大家帮忙看看
JTree如何编辑节点,大家帮忙看看
问?:
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属性为用户输入的值
大家帮忙看看啊
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)
我该怎么处理节点的编辑消息?
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);
即可完成对树的编辑功能
结帖
需要自定义一个
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);
即可完成对树的编辑功能
结帖
相关JAVA教程:
各位高手!好,怎么在JButton中设置标题的布局啊!
想学XML,看什么书比较好?
求助:jbuilder2006运行struts程序出错
Weblogic 下 关于ejb的一个问题
求救!!`各位高手能不能提供些学习JAVA方面的好网站
流程设计器问题
关于XML中加入DTD验证的问题!
weblogic里部署完毕,在调用的时候出了错
“一个Struts实现分页,增删改查,Tiles,国际化的DEMO”请教
调用WEBLOGIC,JNDI的时候出问题
急~!!关于struts+freemarker的问题??
关于Dialog线程的问题