0

基本的に、1 つのオブジェクトを表示および編集するための単なる GUI であるアプリケーションを構築しています。このオブジェクトのクラスはJAXBで作成されているため、基本的には多くの文字列と整数を子として持つツリーですが、 もいくつかありList<E>ます。JAXB はそれぞれの単純な子に対して getter と setter を提供しますが、すべてのリストに対して提供されるのは getter のみです。これは、変更可能な内部リストへの参照を提供するためです。

すべての子 (およびブランチ) を個別のSwing GUI コンポーネントに表示する必要があるため、データを処理するためにこれらのビューが必要ですモデル ビュー コントローラーの設計パターンに関する現在の知識によると、モデルをビューから厳密に分離する必要があります。これに続いて、ベース オブジェクトの内部リストを直接操作できるようにするのは悪い考えです。(実際にそうするのは、私の特定のユース ケースでは非常に簡単な解決策ですが、後で追加機能が追加される可能性があるため、この考えは控えるべきだと思います。)JList

それから私は考え始めました: コンポーネントをリストで直接動作させない場合は、オリジナルのコピーを使用させる必要があります。しかし、元のリストを GUI コンポーネントから返された新しいリストに設定できないため、ビュー データをモデルに保存するときに項目をもう一度コピーする必要があります。また、カスタムの内部リストへの参照を渡すのは賢明ではありませんListModel。つまり、GUI 構造の深さによっては、リストが何度もコピーされる可能性があります。

私も自分のアプリケーションを効率的にしたいので、これも正しいアプローチとは思えません。これを「正しく」構築するにはどうすればよいですか?

概要:

  • 元のList<E>オブジェクトからの は、オブジェクトの内部リストへの参照です。

  • リストのJList表示はこの参照を取得すべきではないため、リストをコピーする必要があります。

  • からリストを取得してJListも、内部リストへの参照は得られないため、再度コピーする必要があります。

  • リストを元のオブジェクトに保存するには、リストを 3 回コピーする必要があります。これは、元のオブジェクトにはリストのセッター メソッドがないためです。(詳細は上記参照)

これについての私の理解は正しいですか?これを適切に構築して効率的にするにはどうすればよいですか?

PS: 元のクラス構造にセッター メソッドを追加することはできません。

4

2 に答える 2

1

@mKorbel によって提案されたすべてのコンポーネントは、あるパネルでの選択を別のパネルでの選択されたアイテムの表示に緩やかに結合できるようにするある種の選択リスナーを提供します。FileBrowserを示しTreeSelectionListenerます。ここに示されている;Outlineを持つことができます。等ListSelectionListener

補遺: この関連するDisplayPanelは、 は隣接する をリッスンし、TableModelクエリを実行して自身のコンポーネントの 1 つでモデルを更新できます。各モデルはそれぞれのビューに疎結合されていることに注意してください。ここでは、一般的な通知メカニズムについて説明します

于 2013-04-10T10:18:13.983 に答える
1

で作成されましたJAXB。基本的には多くの文字列と整数を子として持つツリーですが、いくつかList<E>の もあります。単純な子ごとJAXBにゲッターとセッターが提供されますが、すべてのリストに対してゲッターのみが提供されます。これは、現在変更できる内部リストへの参照を提供するためです。

見る

于 2013-04-10T10:01:24.587 に答える