我正在使用 org.dom4j.swing.DocumentTreeModel 从解析的 DOM 文档构造一个 Swing Jtree。当我编辑构建 treeModel 的文档时,我希望 Jtree 通过 treeModel.reload(); 立即反映这一点。
问题是,当 Jtree 先完全折叠然后通过单击树展开时,它会显示 3 个“测试”元素。但是,此时,当我添加更多的测试元素时,这种变化就不再体现了!为什么当 Jtree swing 处于折叠状态时,它能够反映通过向树添加额外的“测试”元素所做的更改,而不是在 Jtree 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;
}