0

Java のツリーモデルについていくつか質問があります。

クラスの最後の 13 週間、連絡先マネージャーを開発してきました。この連絡先マネージャーにはさまざまなコンポーネントがあります。連絡先はビジネス連絡先または個人連絡先のいずれかであり、それぞれに独自の一連のイベントがあります。また、住所、ソーシャル ネットワーク、電話番号もあります。

最後の課題では、外部の txt ファイルから情報を読み取り、それをプロジェクトに実装する必要がありました。それはうまくいきました。今、彼は、そのテキストからの情報からツリーモデルを構築することを望んでいますが、私はこのツリーモデルがどのように機能するかを理解するのに非常に苦労しています.

たとえば、ルート、親、子、ノードはすべて定義しようとしている単語ですが、非常に苦労しています。この場合、私のルートは連絡先マネージャーであり、私の親は連絡先であり、子供は住所などのようなものでしょうか? 誰かがそれを理解するのを手伝ってくれるなら、それは本当に助けになるでしょう.

私の質問をより理解するのに役立つ場合は、課題からの抜粋を次に示します。

  • JFrame を拡張するクラス ContactManagerFrame を作成します。そのコンストラクターは、引数として ContactManager オブジェクト (ディスクに保存されたシリアル化されたファイルから取得) を受け取ります。

  • 必要なグラフィカル コンポーネントを作成してレイアウトします。(ヒント: JPanel を使用してフィルタリング機能のコンポーネントをグループ化し、JTree を JScrollPane に追加し、コンポーネントを追加するときに BorderLayout を使用します)

  • ツリーのルート (つまり、「Contacts」ノード) に対応する DefaultMutableTreeNode と、ユーザーが指定したフィルターに対応する String を引数として取るメソッド createNodes() を作成します。このメソッドは、図 1 に示すように、連絡先と各連絡先によって参照されるオブジェクトのノードを作成し、それらをツリー構造に編成する必要があります。空の親ノードの作成は避ける必要があります (たとえば、連絡先にアドレスがない場合この特定の連絡先の親ノード「住所」を追加しないでください)。指定されたフィルターが空の文字列の場合、createNodes() は ContactManager オブジェクトに保存されているすべての連絡先を含めます。それ以外の場合、createNodes() には、ContactManager のメソッド searchContacts() によって返された連絡先が含まれます。

  • ルート ノードから DefaultTreeModel オブジェクトを作成します。JTree コンポーネントを初期化するには、DefaultTreeModel を使用してください。

私のためにそれを解決するようにあなたに頼んでいるわけではありません。本当に理解したいだけです。どうもありがとうございました!

4

1 に答える 1

2

JTreeJTableJListJComboBoxなどのより洗練された Swing コンポーネントは、モデルの概念で動作します。これは、コンポーネントによって表示されている下位のデータを意味します。これらは、データ自体を「視覚的」表現 (ビューとも呼ばれます) から分離し、開発者がデータ表現について (多かれ少なかれ) 「忘れる」ことができるように設計されています。したがって、チュートリアルで説明されているように、これらのコンポーネントのいずれかに表示される新しいデータ オブジェクトを追加する必要がある場合は、それをモデルに追加するだけで、ビューが自動的に更新されます。

そうは言っても、これらのコンポーネントには、モデルを引数として取るコンストラクターがあることがわかります。

これらのモデルは、具体的な実装が満たさなければならない基本的な契約を確立するインターフェイスによって定義されます。

特にJTreeの場合、TreeModelインターフェイスとデフォルトの実装であるDefaultTreeModelがあります。さらに、 TreeNodeインターフェイスTreeModelを実装する必要があるノード オブジェクトを操作する必要があります。

したがって、一緒に作業するには、親子関係を介して関連するJTreeものが必要になりますTreeModelTreeNodesたとえば、次のようなものです。

DefaultMutableTreeNode root = new DefaultMutableTreeNode("Contacts"); // root node

DefaultMutableTreeNode contact1 = new DefaultMutableTreeNode("Contact # 1"); // level 1 node
DefaultMutableTreeNode nickName1 = new DefaultMutableTreeNode("drocktapiff"); // level 2 (leaf) node
contact1.add(nickName1); 

DefaultMutableTreeNode contact2 = new DefaultMutableTreeNode("Contact # 2");
DefaultMutableTreeNode nickName2 = new DefaultMutableTreeNode("dic19");        
contact2.add(nickName2);

root.add(contact1);
root.add(contact2);

DefaultTreeModel model = new DefaultTreeModel(root);
JTree tree = new JTree(model);

写真

ここに画像の説明を入力

于 2013-11-27T21:22:22.440 に答える