基本的に、1 つのオブジェクトを表示および編集するための単なる GUI であるアプリケーションを構築しています。このオブジェクトのクラスはJAXBで作成されているため、基本的には多くの文字列と整数を子として持つツリーですが、 もいくつかありList<E>
ます。JAXB はそれぞれの単純な子に対して getter と setter を提供しますが、すべてのリストに対して提供されるのは getter のみです。これは、変更可能な内部リストへの参照を提供するためです。
すべての子 (およびブランチ) を個別のSwing GUI コンポーネントに表示する必要があるため、データを処理するためにこれらのビューが必要です。モデル ビュー コントローラーの設計パターンに関する現在の知識によると、モデルをビューから厳密に分離する必要があります。これに続いて、ベース オブジェクトの内部リストを直接操作できるようにするのは悪い考えです。(実際にそうするのは、私の特定のユース ケースでは非常に簡単な解決策ですが、後で追加機能が追加される可能性があるため、この考えは控えるべきだと思います。)JList
それから私は考え始めました: コンポーネントをリストで直接動作させない場合は、オリジナルのコピーを使用させる必要があります。しかし、元のリストを GUI コンポーネントから返された新しいリストに設定できないため、ビュー データをモデルに保存するときに項目をもう一度コピーする必要があります。また、カスタムの内部リストへの参照を渡すのは賢明ではありませんListModel
。つまり、GUI 構造の深さによっては、リストが何度もコピーされる可能性があります。
私も自分のアプリケーションを効率的にしたいので、これも正しいアプローチとは思えません。これを「正しく」構築するにはどうすればよいですか?
概要:
元の
List<E>
オブジェクトからの は、オブジェクトの内部リストへの参照です。リストの
JList
表示はこの参照を取得すべきではないため、リストをコピーする必要があります。からリストを取得して
JList
も、内部リストへの参照は得られないため、再度コピーする必要があります。リストを元のオブジェクトに保存するには、リストを 3 回コピーする必要があります。これは、元のオブジェクトにはリストのセッター メソッドがないためです。(詳細は上記参照)
これについての私の理解は正しいですか?これを適切に構築して効率的にするにはどうすればよいですか?
PS: 元のクラス構造にセッター メソッドを追加することはできません。