gpt4 book ai didi

java - 刷新JtreeModel不起作用但Jtree相应更新

转载 作者:行者123 更新时间:2023-12-01 19:18:28 27 4
gpt4 key购买 nike

我正在使用 org.dom4j.swing.DocumentTreeModel 从已解析的 DOM 文档构造 Swing Jtree。当我编辑构建treeModel的文档时,我希望Jtree能够通过treeModel.reload()立即反射(reflect)这一点;

问题是,当 Jtree 首先完全折叠,然后通过单击树展开时,它会显示 3 个“测试”元素。然而,此时,当我添加更多测试元素时,这种变化不再体现出来!为什么当 Jtree swing 处于折叠状态时,它能够反射(reflect)通过向树添加额外的“测试”元素所做的更改,但当 Jtree swing 展开时却不能反射(reflect)。

我完全期待更多的“测试”元素被实时附加,无论 swing JTree 是否打开。

org.dom4j.swing.DocumentTreeModel treeModel = null;

DemoConstructor(){
DOMReader dr = new DOMReader();
org.dom4j.Document dom4jdocument = dr.read(browser.getDocument());

//Create a split pane and display the tree .
JScrollPane scrollPane = new JScrollPane(createTree(dom4jdocument));
ProgrammaticallyCalledToEditDoc();
ProgrammaticallyCalledToEditDoc();
ProgrammaticallyCalledToEditDoc();
}

private static void ProgrammaticallyCalledToEditDoc(){
dom4jdocument.addElement("test");
}

private static Component createTree(org.dom4j.Document document) {
treeModel = new DocumentTreeModel(document);
TreeModelListener l = new TreeModelListener() {

@Override
public void treeStructureChanged(TreeModelEvent e) {
// TODO Auto-generated method stub
treeModel.reload();
}

@Override
public void treeNodesRemoved(TreeModelEvent e) {
// TODO Auto-generated method stub
treeModel.reload();
}

@Override
public void treeNodesInserted(TreeModelEvent e) {
// TODO Auto-generated method stub
treeModel.reload();
}

@Override
public void treeNodesChanged(TreeModelEvent e) {
// TODO Auto-generated method stub
treeModel.reload();
}
};;;
treeModel.addTreeModelListener(l);
JTree tree = new JTree(treeModel);


return tree;
}

最佳答案

很可能 DocumentTreeModel 不会像它的任务那样触发适当的 TreeModelEvents。在监听器中进行重新加载是没有意义的(如果抛出事件,这就是完整的循环;-),JTree 本身正在监听模型并知道在接收插入后要做什么。要进行检查,请在监听器方法中插入简单的 println 。

编辑(回答“我应该做什么......”的评论 - 这里更容易)

1) 没有任何东西 - 至少没有任何东西会影响模型:如果模型表现良好,你最终会陷入无限循环(见下文)

2)循环(又名:完整循环)是:

模型触发事件 --> 监听器接收事件 --> 监听器修改模型 (model.reload) --> 模型触发事件 --> ...

关于java - 刷新JtreeModel不起作用但Jtree相应更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5563917/

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