【发布时间】:2015-12-06 12:42:59
【问题描述】:
我有一个带有 DefaultTreeModel 和一些 DefaultMutableTreeNodes 的 JTree。
我正在寻找一种方法来更改节点的 displayName,但我不想更改 userObject,因为我需要它完全符合它的设置。
此外,我不能简单地覆盖我的 userObject 的 toString 方法,因为我在代码中的其他地方使用了 toString,而对此方法的相应更改将是不合适的。
那么问题是,是否有可能在上述条件下实现节点的重命名?
提前致谢
乌鸦
编辑: 一个小代码示例:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.DefaultMutableTreeNode;
public class TreeNodeRenameExample extends JFrame {
private JPanel contentPane;
private JTree tree;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TreeNodeRenameExample frame = new TreeNodeRenameExample();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public TreeNodeRenameExample() {
initGUI();
}
private void initGUI() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
this.contentPane = new JPanel();
this.contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
this.contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(this.contentPane);
{
this.tree = new JTree();
this.tree.setModel(new DefaultTreeModel(
new DefaultMutableTreeNode("JTree") {
{
add(new DefaultMutableTreeNode(new testObj("Peter")));
add(new DefaultMutableTreeNode(new testObj("Stephen")));
}
}
));
this.contentPane.add(this.tree, BorderLayout.CENTER);
}
}
public class testObj {
private String name;
public testObj(String name) {
this.name = name;
}
public String toString() {
return "Name: " + this.name;
}
}
}
我想做的是将 TreeNodes 上的文本更改为不同的内容。例如“MyTreeNode1”和“MyTreeNode2”,但我想保留这两个节点的userObject,我的testObj和toString方法也不能改变......
【问题讨论】:
-
也许你应该发布你的代码。 Take a look at this
-
显示我所有条件的完整代码太长了,一小部分只会说我的描述,因为它或多或少是一个一般性问题,而不是真正依赖于我的代码使用
-
但如果你愿意,我会给你一个小例子......