2

Java JTree パネルを実装しています。このパネルには、ツリー状の一連のデータ構造 (コンポジットのリストのリスト - 異なるクラス) から構築された TreeModel が保持されます。これらのデータ構造は、定義した一連のインターフェイスに基づいて、外部の jar 実装から取得します。

ツリーノードには、チェックされたノードとすべての子ノードが「アクティブ」になること、つまり、ノードによって表されるオブジェクトがデータベースからデータを取得するなど、何かを行う必要があることを示すために、ユーザーがチェックできるチェックボックスが含まれています。

ツリーノードは、それらを「アクティブ化」せずに、つまりチェックボックスをオンにせずに選択することもできます。

それに加えて、プログラムの他の部分もデータモデル オブジェクトのアクティブ化状態を切り替える場合があります。したがって、ツリーモデルが構築されるデータ モデルは、アクティブ化状態のソースです。これは、チェックボックスを動的に (チェックを外して) ツリービューに反映する必要があります。

さて、この全体をどのように実装しますか?誰がどのような変更を聞く必要がありますか?

これで、ノード内のすべてのクラスが、アクティベーション フィールドを保持する抽象クラスから拡張されました。これが真のデータソースです。このフィールドが変更されると、サブスクライブしているすべてのリスナー (EventListener) に通知する必要があります。これには、チェックボックスが含まれます。

デフォルトの TreeSelectionModel に基づいているが、子/親をチェックする必要があるかどうかをチェックする機能で拡張された TreeSelectionModel もあります。

私の質問はあまり明確ではないかもしれませんが、この複雑なコードもそうです。お役に立てれば幸いです。

4

3 に答える 3

2

たくさんの可動部分があるようです。すべての変更を に注ぎ込み、自動的にリスナーになるようにすることをTreeModelお勧めします。が のサブクラスであるJTree場合、JTree に再描画を警告する( 、など) メソッドのホストを取得します。このイベントの発生は、AWT EventQueue で必ず行ってください。 TreeModelDefaultTreeModelfire*fireTableStructureChangedfireTreeNodesChanged

here は、sを使用するための多くの例を含む優れたチュートリアルTreeです。

于 2009-06-29T00:17:33.467 に答える
1

jideコンポーネントをチェックしてください。チェックボックスツリーも含まれています:

代替テキスト

于 2009-06-29T07:06:37.623 に答える
1

あなたは正しい考えを持っているように思えます-ノードを「アクティブ化された」知識の正規のソース、およびアクティブ化イベントの正規のソースにします。次に、それをリッスンし、それらのイベントをetc にTreeModel変換します。これにより、が自動的に更新されます。fireTreeNodesChanged()JTree

トラブルを回避するには、ノード -> ツリー イベントの関係を一方向に保つようにしてください。つまり、ツリーをコントローラーとして使用せず、ツリー イベントがアクティブ化状態を変更できないようにします。

于 2009-06-30T09:19:48.950 に答える