0

私のエディターには、LayersManagerLayersViewクラスがあります。LayersManager クラスは、ユーザーが現在使用しているすべてのレイヤーを保持します (Photoshop レイヤーと考えてください)。LayersView は、LayersManager に含まれるレイヤーを一覧表示する JPanel です。

私がしたいのは、LayersManager から add(Layer) または remove(Layer) メソッドが呼び出されるたびに、JPanel のコンテナから LayerComponent を追加または削除して、LayersView JPanel を更新することです。

言い換えれば、私が欲しいのは、LayersManager で変更が行われるたびに、LayersView が自動的に接続され、コンテナから LayerComponent を追加または削除し、それ自体を無効にするリバース ChangeListener です。

私の質問は次のとおりです。これを行うための標準の組み込みリスナーはありますか? リスナーは正しい道ですか?または、LayersManager 内に LayersView への参照を含めて、必要なメソッドを手動で呼び出す必要があります (これは設計が悪いと思われます)。独自のリスナーを実装するための優れた (設計上の) 方法が思い浮かびません。

どんな助けでも大歓迎です!

4

1 に答える 1

1

オブザーバー パターンを使用できます。Java には、 ObservableおよびObserverクラスの形式で、このパターンのサポートが組み込まれています。

基本的に、あなたLayersManagerは拡張Observableし、あなたLayersViewは実装しObserverます。次に、 を呼び出しaddObserverて、LayersManagerを渡しますLayersView

それが整ったら、LayersManager通知したい変更が発生するたびに、次のメソッドを呼び出すことができますLayersView

layersManager.setChanged();
layersManager.notifyObservers();

リスナーに何らかのデータを受信さnotifyObserversせたい場合、このメソッドはオブジェクトをパラメーターとして受け取ることができます。ObservernotifyObservers呼び出されるとLayersViewupdateメソッドが呼び出されます。

于 2013-01-17T08:36:11.647 に答える