org.dom4j.swing.DocumentTreeModelを使用して、解析されたDOMドキュメントからSwingJtreeを構築しています。treeModelの作成元のドキュメントを編集するとき、JtreeはtreeModel.reload()によってこれをすぐに反映することを期待しています。
問題は、Jtreeが最初に完全に折りたたまれ、次にツリーをクリックして展開されると、3つの「テスト」要素が表示されることです。ただし、この時点で、テスト要素を追加すると、この変更は反映されなくなります。Jtreeスイングが折りたたまれた状態の場合、ツリーに「テスト」要素を追加することによって行われた変更を反映できますが、Jtreeスイングが展開された場合は反映できません。
スイング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;
}