2011-07-18 4 views
3

Deque<T>を含むクラス(Model.javaと呼ぶ)を作成しました。アイテムのエンキューとデキューのメソッドがあります。今私はこれをGUIのJListに結びつけようとしています。 JListが望んでいるDefaultListModelとして、私の "モデル"データ(Deque)をどうにか使う方法にはうんざりです。私はまだGUIプログラミングに適用されるので、実際にOOの概念を得るのには苦労しています。 DefaultListModelのドキュメントの状態:Java Deque <T>をDefaultListModelに変換するにはどうすればよいですか?

それは、java.util.Vectorのの1.1.xのバージョンを実装して何のコレクションクラスをサポートしていない、そしてときに変更ListDataListenersに通知し、その中でこのクラスは緩く、java.util.VectorのAPIを実装します発生する。ベクトルに現在委譲....

は/すべてのリスニングを提供しながら、このように私のModel.javaコードが大幅に変更されないまますることができ、代わりにベクトルの私のDeque<T>を使用するようにDefaultListModelを得るためにそこにいくつかの方法です。自由に行動を通知する?または、ModelListをDeque<T>の代わりにDefaultListModelを使用するように書き直す必要がありますか? JListについては

+0

+1初心者の方には良い質問です。そして、ようこそ! –

答えて

5

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

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

ListModelが唯一の4つのメソッドを持っているので、あなたのクラスは、それらを実装し、社内Dequeに業務を委任するために、それは非常に簡単にする必要があります。あなたのクラスは

public class Model implements ListModel 
{ 
    .... 

として宣言されなければならないとListModelのメソッドを実装する4つの追加のメソッドが含まれます。実装は、あなたがカバーして必要なことを行うことができますが、ListModelの定義と、JavaDocのListModelコントラクトの一部として指定された動作に従わなければなりません。

これを実行すると、のインスタンスをコンストラクタに渡してJListを構築できます。それはすでにリスナーやイベントに対処するために処方さEventListenerListメソッドを実装して

+0

ありがとう - それは非常に有用です。これは、AddListDataListener()メソッドを提供している限り、Dequeに重大な変更が発生したことをリスナーに「通知」する時期や方法を決定することに関わる必要はありませんか? – Chap

+0

私はモデルクラスをListModelの実装として宣言し、4つのメソッドスタブを挿入しました。 getSize()とgetElementAt()は簡単に実装することができましたが、addListDataListener()で何をすべきか分からず空のままにしました。したがって、オブジェクトをデキューに追加して後で取得することはできましたが、GUIに表示されませんでした。ドキュメントを読むと、ListDataEventsをListDataListenersに送信するのが私の責任であることがわかります。だから私は実際にはListを実装してトラバースするために_another_リストを実装する必要があると思いますか?そして、私は物事を変えるときにイベントを送りますか?ワオ。 – Chap

+0

うん、そうだ。あなたのクラスが他のものを拡張しない場合は、 'DefaultListModel'(これは' ListModel'を自動的に実装します)を拡張し、リスナーの処理を委譲することができます。デフォルトの実装が他のすべてのクラスと互換性がある場合は、それらのメソッドをクラスから外して、スーパークラスの実装が呼び出されます。ただし、変更があった場合でもリスナーに通知する必要があります。 –

1

、あなたは、ListModelインターフェースのほんのいくつかの実装をDefaultListModelを使用する必要はありません。後者はDequeを使用すると非常に達成可能です。

+0

偽の編集に申し訳ありません。 – trashgod

1

私は、良い出発点であるかもしれないaddListDataListener()

AbstractListModelのために何をすべきかを知りませんでした。

+0

これは初心者として私にとって最高のアプローチでした。 EventListenerListの存在とリスナーに知らせるプロセスに注意を払いましたが、最初にそれらの詳細を実装する必要はありませんでした。 – Chap

関連する問題