java - 在 jtree 中编辑节点值时,我需要一个监听器来跟踪,但我应该怎么做呢?

标签 java swing listener jtree

我的问题也与此链接有关。 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/

相关文章:

java - Android:返回圆的半径?

java - 如何重写JPopupMenu的show方法?

java - Android NavigationView 监听器打开/关闭 Activity

java - JMS 监听器关闭 2 小时,然后如何在消息从主题启动后恢复消息

Java 我想我的问题是如何重用一个对象来将 2 条记录添加到我的数据库程序中

java - Java中character与int的转换

Java - 绘制标尺(带有 90 度角刻度线的线)

java - 从行中获取 id

php - 为什么我应该在 Laravel 中使用事件和监听器

java - 剪断长绳子