3

を含むクラス (Model.java と呼びましょう) を作成しDeque<T>、アイテムをエンキューおよびデキューするためのメソッドを使用しました。今、これを GUI JList に関連付けようとしています。「モデル」データ (Deque) を JList が必要とする DefaultListModel として使用する方法に困惑しています。オブジェクト指向の概念は、GUI プログラミングに適用されるため、実際に理解するのにまだ苦労しています。DefaultListModel のドキュメントには次のように記載されています。

このクラスは、java.util.Vector の 1.1.x バージョンを実装し、コレクション クラスをサポートせず、変更が発生したときに ListDataListeners に通知するという点で、java.util.Vector API を大まかに実装します。現在、Vector に委任しています ....

Deque<T>Vector の代わりにmy を使用するように DefaultListModel を取得する方法はありますか? または、代わりに DefaultListModel を使用するように Model.java を書き直す必要がありDeque<T>ますか?

4

3 に答える 3

5

コンストラクターは(実装)ではなく (インターフェース)JListを取ることに注意してください。これは、たまたまインターフェースを実装する任意のオブジェクトを使用できることを指定する OO 原則 (コントラクト)です。Object Oriented Programming Conceptsに関する Java チュートリアルから:ListModelDefaultListModelJListListModel

インターフェイスは、クラスと外部世界の間の契約です。クラスがインターフェイスを実装するとき、そのインターフェイスによって公開された動作を提供することを約束します。

ListModelメソッドは 4 つしかないため、クラスがそれらを実装して操作を internal に委任するのは非常に簡単ですDeque。クラスは次のように宣言する必要があります

public class Model implements ListModel
{
     ....

には、 のメソッドを実装する 4 つの追加メソッドが含まれますListModel。実装は、内部で必要なことは何でも実行できますが、JavaDoc で契約ListModelの一部として指定されている動作の定義に準拠する必要があります。ListModel

これが完了したらJList、クラスのインスタンスをコンストラクターに渡すことを構築できますModel

于 2011-07-18T02:19:44.420 に答える
1

の場合JList、を使用する必要はありません。インターフェースDefaultListModelの実装だけです。ListModelそして後者は、を使用して非常に達成可能Dequeです。

于 2011-07-18T01:58:35.430 に答える
1

何のためにするのかわからなかったaddListDataListener()

AbstractListModelEventListenerListリスナーとイベントを処理するための所定のメソッドが既に実装されているため、良い出発点になる可能性があります。

于 2011-07-18T05:54:38.527 に答える