この質問の冗長性を許してください。これを書いているのは、設計上の問題を考えようとしているからです!
RMI アプリケーションへの再構築が必要な Swing アプリケーションを継承しました。お客様は、Swing GUI をローカルで実行し、RMI を介してリモート サーバー プロセスと通信する必要があります。これには、Swing クライアント間のギャップを埋める EventListeners によって刺激されたときに、ビジネス ロジックのセクションとバックエンド データベースの永続性への呼び出しを指示するコントローラー クラスが含まれます。そしてコントローラー。
サーバーで使用するために新しいビューを開発できるように、MVC 設計を実装します。
現在、Swing クライアント GUI には、DefaultTreeModel を使用して設定された JTree が含まれています。このモデルは、DefaultMutableTreeNode オブジェクトを使用して構築されます。このオブジェクトには、これらのオブジェクトとデータ ソースの間にある BusinessObject マッパーを介してビジネス オブジェクトの状態が取り込まれます。
Client と TreeModel がどのようにリンクされているかを理解するのに問題はありません。TreeModel への変更を監視するために TreeModelListener を確立しました。TreeModel オブジェクトが変更された場合は、treeHasChanged() メソッドを呼び出して JTree を再描画します。
しかし、どのプロセスが TreeModel を刺激するのかを想像しようとして頭が痛くなり、その内容がデータベース内の最新のデータで再作成され、次に TreeModelListener が呼び出されて GUI の Jtree が更新されます。TreeModel を「所有」するのは誰ですか? コントローラーの状態の一部を構成するモデル内のクラスである必要がありますか? GUI の EventListeners によるコントローラーのアクションは、TreeModel を更新するルーチンを実行するためにハード コールを行う必要がありますか?
あるいは、TreeModel は GUI ウィジェットの拡張であり、その場合はビュー コンポーネントですか? もしそうなら、このオブジェクトの状態のリフレッシュを呼び出す適切な方法は何でしょうか?
ここ数日、私はオブザーバーとリスナーの観点から考えてきたので、オブザーバーの発砲の背後で発生する動作を呼び出そうとしていることにおそらく罪を犯していることに注意する必要があります。
あなたは、非常に混乱しています!