我的问题也与此链接有关。 http://docs.oracle.com/javase/tutorial/uiswing/components/tree.html#data
我正在修改一个使用 Jtree 的解析器程序。在我的程序中创建 Jtree 的方式与我上面发布的链接中的示例非常相似。我们将其称为 CREATE-JTREE-METHOD-1。
DefaultMutableTreeNode top =
new DefaultMutableTreeNode("The Java Series");
createNodes(top);
tree = new JTree(top);
...
JScrollPane treeView = new JScrollPane(tree);
...
private void createNodes(DefaultMutableTreeNode top) {
DefaultMutableTreeNode category = null;
DefaultMutableTreeNode book = null;
category = new DefaultMutableTreeNode("Books for Java Programmers");
top.add(category);
book = new DefaultMutableTreeNode(new BookInfo
("The Java Tutorial: A Short Course on the Basics",
"tutorial.html"));
category.add(book);
...
}
基本上,首先创建具有“顶部”节点的 Jtree,然后在解析出具有文本值的节点时将其“添加”到“顶部”节点。
我的工作是尝试手动更改单个节点的值,并在这个事件监听器中执行一些操作。
在我发布的同一链接的“动态更改树”部分中。它给出了以下示例来实现节点更改监听器,
rootNode = new DefaultMutableTreeNode("Root Node");
treeModel = new DefaultTreeModel(rootNode);
treeModel.addTreeModelListener(new MyTreeModelListener());
tree = new JTree(treeModel);
但是,这个 Jtree 是使用 DefaultTreeModel 构建的(我们称之为 CREATE-JTREE-METHOD-2)。但它没有提供有关如何将数据添加到模型的示例代码。
我不知道是否有办法从使用方法 1 创建的 Jtree 中获取数据模型,然后使用如图所示的 addTreeModelListener() 方法?换句话说,方法1确实也使用了DefaultTreeModel吗?
我尝试搜索类似 getDefaultTreeModel() 的内容,但没有成功。
如果上述树模型不起作用,我可以通过其他方式跟踪 Jtree 上正在更改的节点值吗?
提前致谢,
最佳答案
您可以使用默认树模型创建树...
...然后通过简单地从树中获取模型来检索该模型(是的,你是对的,但它正在工作^^
DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
DefaultTreeModel model = new DefaultTreeModel(root);
JTree tree = new JTree(model);
DefaultTreeModel model2 = (DefaultTreeModel)tree.getModel; //<-- you'll have to cast it!
但是你想直接从jtree获取根节点...它不能直接访问...阅读源代码揭示:
/**
* Creates a new <code>JTree</code> object.
*
* @param root the root node
*/
public JTree(TreeNode root)
{
this(root, false);
}
/**
* Creates a new <code>JTree</code> object.
*
* @param root the root node
* @param asksAllowChildren if false, all nodes without children are leaf
* nodes. If true, only nodes that do not allow children are leaf
* nodes.
*/
public JTree(TreeNode root, boolean asksAllowChildren)
{
this(new DefaultTreeModel(root, asksAllowChildren));
}
(来自 http://developer.classpath.org/doc/javax/swing/JTree-source.html )
当您创建带有根节点的jtree时,tableModle总是创建...(就像您编写new JTree(new TreeNode() );
所以 - 只需跳过创建带有根节点的 JTree 的部分,并按照上面的建议进行操作 - 使用 treeModel 创建它..在那里您可以添加(按照您自己的建议)treeModelListener
关于java - 在 jtree 中编辑节点值时,我需要一个监听器来跟踪,但我应该怎么做呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25970137/