ツリーデータ構造の使用を必要とするプロジェクトに取り組んでいます。いくつかの調査を行った結果、Java JTreeが私のプロジェクトに非常に役立つことがわかりましたが、1週間かけて修正したが、役に立たなかったという問題に遭遇しました。
ここに問題があります。新しいノードを作成するには、DefaultMutableTreeNodeをインスタンス化する必要があり、それをループで実行する方法がわかりません。通常、JTreeに新しいノードを作成する場合は、最初に次の方法でノードを宣言します。
DefaultMutableTreeNode parent = new DefaultMutableTreeNode("This is parent node.");
DefaultMutableTreeNode child = new DefaultMutableTreeNode("This is child node.");
次に、子ノードを親ノードに追加/リンクするには、次のようにします。
parent.add(child);
親ノードと子ノードを含む2つのアレイリストがあります。これらは親子関係で相互に対応しています。つまり、arraylistParent.get(x)は常にarraylistChild.get(x)の親になります。
forループを使用することで、次のことができると考えていました。
for (int x = 0; x < arraylistParent.size(); x++){
parent.add(new DefaultMutableTreeNode(arraylistChild.get(x)));
}
これはフラットな階層ツリーでのみ機能しますが、私には明らかに当てはまりません。arrayListParentには、子ノードを追加する前に確認する必要のある異なる親ノードがありますが、ここでも、すべての子ノードが同じ単一の親ノードを持っているわけではありません。私のアレイリストには、おそらく次のようなものが含まれています。
arraylistParent = [root, p1, p2, p2, p3, p1]
arraylistChild = [p1, p2, p5, p3, p4, p5]
そして私はこのようなツリー構造を生成したいと思います:
root
..p1
..p2
..p5
..p3
..p4
..p5
明らかに、parent.getUserObject()がarraylistParent.get(x)と同じであるかどうかを確認するために、いくつかのifループを内部にスローできますが、文字列「Thisisparentnode」に一致するものだけがチェックされて追加されます。
ループ内に別の存在しない親が見つかった場合は、新しい親を作成する必要があります。これは、ループに新しい親を自動的に作成させる方法がわからないため、解決方法がわからないトリッキーな部分です。子ノードの親のインスタンス。