I持って以下の方法で構築されJTree
:トラブル
void populateTree(BKMNode parent) {
for (DataNode node : nodes) {
BKMNode treeNode = new BKMNode(node.name,node.fullName,null);
// check if this node was already added before
if (! existingNodes.contains(ip + "." + node.fullName)) {
existingNodes.add(ip + "." + node.fullName);
DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
model.insertNodeInto(treeNode, parent, parent.getChildCount());
System.out.println("adding " + ip + "." + node.fullName);
}
node.populateTree(treeNode);
}
// some more non-relevant code...
は(
BKMNode
クラスが
DefaultMutableTreeNode
を拡張し、
DataNode
は、単にデータを保持しています)
アプリケーションの起動時にツリーが作成されると、すべて正常です。
しかし、私のアプリケーションは同じ方法でツリーにノードを追加します。
アプリケーションが新しいノードをツリーに追加しようとすると、テキストが印刷されますが、GUI
では何も変更されません。
私はJTree.invalidate()
、validate()
、repaint()
、reload()
と呼んでみましたが、何も役に立たないようです。
populateTree
メソッドは、常にEDT
から呼び出されます。
ここで何が問題なのか誰も知っていますか?
ありがとうございます!
すぐに役立つように、SSCCE(http://pscode.org/sscce.html)を投稿してください。 –
また、実際にはJTreeをどこで変更していますか?ノードを挿入するたびに新しいDefaultTreeModelを作成するようですか?既存のDefaultTreeModelをクリアしてノードを追加するべきではありませんか? – Pace
新しいモデルを作成せず、ツリーオブジェクト自体への参照を使用してそのモデルへの参照を取得します。モデルのinsertNodeIntoを呼び出すことでJTreeを変更します。 – yacov