2009-06-28 8 views
2

私はJava JTreeパネルを実装しています。このパネルは、ツリー状の構造(複雑なリスト(異なるクラスのリスト)のリスト)からTreeModelビルドを保持します。私は定義したインターフェイスのセットに基づいて、外部のjar実装からこれらのデータ構造を取得します。ノードオブジェクトの状態が変更されたときに動的にJTreeビューを変更するにはどうすればよいですか?

トリノードには、チェックされたノードとすべての子ノードが「アクティブ」になることを示すチェックボックスが含まれています。つまり、ノードによって表されるオブジェクトは、データベース。

トリノードは、チェックボックスをオンにしないで、「アクティブ化」せずに選択することもできます。

さらに、プログラムの他の部分もデータモデルオブジェクトのアクティブ化状態を切り替えることができます。したがって、トレモデルが構築されるデータモデルは、アクティブ化状態のソースです。これは、チェックボックスを動的に(un)チェックすることによってツリービューに反映されなければなりません。

ここで、この全体を実装するにはどうすればよいですか?何が変わるのか聞き手は誰ですか?

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

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

私の質問は本当にはっきりしないかもしれませんが、この複雑なコードもそうです。あなたが手伝ってくれることを願います。

答えて

2

可動部分がたくさんあるようです。 TreeModelですべての変更を管理し、自動的に受信するようにJTreeをリスナーにすることは良いことでしょう。 TreeModelDefaultTreeModelのサブクラスの場合は、fire*fireTableStructureChanged,fireTreeNodesChangedなど)のホストを取得し、JTreeに再描画を警告します。 AWT EventQueueでイベントの発生を確認してください。

here is a good tutorialTreeを使用する例があります。

1

jideのコンポーネントを確認してください。またcheckboxtreeが含まれています

alt text

1

あなたは正しい考えているようそれは私に聞こえる - 「活性化」の知識、および活性化イベントの正規の送信元のノードを作る標準的なソースを。その後、TreeModelを聞いて、それらのイベントをfireTreeNodesChanged()などに変換すると、JTreeが自動的に自動的に更新されるはずです。

問題を解決するには、node - > treeイベントの関係を一方向に保つようにしてください。つまり、ツリーをコントローラとして使用しないで、ツリーイベントがアクティブ化状態を変更しないようにしてください。

関連する問題