私は、ツリー内のノードの表示文字列を任意に変更することをサポートする、DefaultMutableTreeNode
のオーバーライドが設定されたDefaultTreeModel
を使用しています。下のコードに示すように、私のフォームでは、ツリーを別のクラスに作成し、メインデータ型のラッパークラスを介して渡すことで、新しいノードをツリーに挿入します。手順は、新しいオーバーライドDefaultMutableTreeNode
を作成し、それに子を追加します(各AccessPoint
は複数の子ノードを持つノードで表されます)。その後、UIで後で使用できるように保存します。TreeModelで新しいノードが追加されたときにJTreeが更新されないのはなぜですか?
このようにノードを初めて追加すると、美しく動作します。次のコードで追加された後続のノードは、実際にはDefaultTreeModel
に格納されますが、JTree
は新しいノードで更新されていません。
なぜ、JTree
に最初の子が追加された後にデータが取り込まれないのですか?
private void populateAccessPointTreeModel(AccessPointDataWrapper wrapper) {
//the pre-created DefaultMutableTreeNode subclass instance is
// stored in the wrapper
DefaultMutableTreeNode accessPointNode =
wrapper.getAccessPointTreeNode();
//this line updates the accessPointTree with the new node (I've looked at the
// value in debug mode, and it does in fact add the node
((DefaultMutableTreeNode) accessPointTree.getRoot()).add(accessPointNode);
//unrelated logic happens down here...
}
必要に応じてノードを作成するコードを含めることができますが、問題ではないと思います。
コンポーネントまたはその親を再描画しようとしましたか? – Bitmap