4

我正在尝试在 java swing 中创建一个 JTree 现在我想在运行时更改节点文本

try
 {

int a=1,b=2,c=3;
 DefaultMutableTreeNode root =
new DefaultMutableTreeNode("A"+a);
DefaultMutableTreeNode child[]=new DefaultMutableTreeNode[1];
DefaultMutableTreeNode grandChild[]= new DefaultMutableTreeNode[1];

child[0] = new DefaultMutableTreeNode("Central Excise"+b);
  grandChild[0]=new DefaultMutableTreeNode("CE Acts: "+c);
child[0].add(grandChild[0]);
 root.add(child[0]);
tree = new JTree(root);
 }
 catch(Exception ex)

 {
  ex.printStackTrace()
 }

现在我想稍后我如何在子节点和大子节点中动态地将 A 1 更改为 2

4

2 回答 2

10

你正在寻找javax.swing.tree.DefaultMutableTreeNode.setUserObject(Object)

DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();
root.setUserObject("My label");
model.nodeChanged(root);

这假设您正在使用DefautltTreeModel.

于 2013-04-15T11:15:19.113 回答
2

如果您不使用自定义 TreeModel,则树的模型是DefaultTreeModel

给定 DefaultMutableTreeNode getUserObject()(字符串或其他)来实现您想要的,您需要使用某种比较器来遍历树。

根据您的问题和粘贴的代码,您有 2 个简单的选项:

  • 如果您的更改是由点击事件触发的,您可以获得选择并从那里遍历树。
  • 否则你需要从根部走树

成功更改后,您需要从模型中触发事件,这些事件将在稍后触发视图的重绘(nodeWereInserted等)。

希望能帮助到你

于 2013-04-15T11:09:56.623 回答