gpt4 book ai didi

java - 设置新的 jtree 模型后 JTree 刷新

转载 作者:行者123 更新时间:2023-12-02 08:21:30 25 4
gpt4 key购买 nike

我正在尝试动态使用 JTree 组件。在根节点下,我有四个节点,其中之一(“操作”)可以有 0 到多个子节点。这是由用户通过根据用户请求打开的单独窗口中的可编辑列表来设置的。编辑此列表后,用户点击“保存”按钮,然后奇迹就会发生。编辑后的列表被发送到服务器(实际上在同一台机器上,所以不需要很长时间),带有列表的窗口被关闭,但在此之前主窗口(带有jtree)被告知刷新自身,我可以看到它按照日志输出中的指示执行操作,但更改不会显示在屏幕上。

我正在使用 DefaultTreeModel,在开始时(第一次打开窗口时)调用此方法来创建模型,并在更改后调用新结构来更新新模型。使用 dmtn.getLeafCount() 我可以看到从服务器新下载的结构是正确的,并且“操作”下的叶子数量发生了变化

public DefaultTreeModel getDataStructure() {
int dataID = task.getData().getId();
LoggerUtility.logger.info("Data ID: " + dataID);
DefaultMutableTreeNode dmtn = Manager.manager.getDataStructure(task.getId());
LoggerUtility.logger.info("DTMN created "+dmtn.getLeafCount());

return new DefaultTreeModel(dmtn);
}

刷新jtree的方法看起来像这样(很乱):

public void updateTree(){
taskDataTree.setModel(getDataStructure());
((DefaultTreeModel)taskDataTree.getModel()).reload();
this.revalidate();
this.repaint();
taskDataTree.revalidate();
taskDataTree.repaint();
taskDataTree.updateUI();
taskDataTree.setVisible(false);
taskDataTree.setVisible(true);
jScrollPane2.setViewportView(taskDataTree);
}

这非常困惑,因为我尝试将在论坛上找到的所有可能的问题解决方案放入其中,我还尝试了自己的树模型实现,它将调用 fireTreeStructureChanged(...) 但它也没有改变。

我可能还应该补充一点,我正在使用 Netbeans GUI Builder 来构建我的 gui,尽管我不知道它是否与此有关。

如果您能提供任何帮助,我将不胜感激

BR卢贾

编辑!!!我还尝试将其放入另一个线程中,如下所示:

public void updateTree() {

SwingWorker sw = new SwingWorker() {

@Override
protected Object doInBackground() throws Exception {
taskDataTree.setModel(getDataStructure());
((DefaultTreeModel) taskDataTree.getModel()).reload();
taskDataTree.revalidate();
taskDataTree.repaint();
taskDataTree.updateUI();
taskDataTree.setVisible(false);
taskDataTree.setVisible(true);
jScrollPane2.setViewportView(taskDataTree);
return null;
}
};
sw.execute();
}

但这也没有帮助。

最佳答案

tree.setModel( anotherModel );

这是您唯一需要的代码行。

如果它不起作用,则意味着树变量不包含对添加到 GUI 的树的引用。也许您有一个同名的类变量和局部变量。

关于java - 设置新的 jtree 模型后 JTree 刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5368367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com