6

ディスプレイの一部に対してカスタムJPanelをインスタンス化するSWINGGUIクラスがあります。このカスタムクラスには、ボタンやテキストフィールドなどがあります。カスタムJPanelを所有するGUIクラスには、データモデルの変更を処理するコントローラークラスもあります。イベントを処理するために、カスタムパネルからその所有者(私のGUIクラス)にアクションを渡すにはどうすればよいですか?

私は、カスタムパネルのコンストラクターに、GUIのコントローラークラスへの参照を追加して、ボタンのactionListenerとして設定できると考えていました。このアプローチはお勧めですか?より良いアプローチはありますか?

4

2 に答える 2

4

Viewコード(カスタムJPanel)には、Controllerフィールド(またはコントローラークラスを取得する他の方法)が必要です。そうすれば、ユーザーからアクション(たとえば、ボタンをマウスでクリックするなど)を受け取ったときに、を呼び出すことができますcontroller.doTheAppropriateAction()。構築時にinを渡すかController、Javabeanセッターパターンを使用して、構築直後にスタートアップロジック(「GUIクラス」のように聞こえます)に設定します。GUIエディターはパラメーターなしのコンストラクターを必要とするため、私はJavabeanパターンを好みます。

何かが変更されたときに自動的に通知されるように、関連する(または)クラスに自分Viewを登録する必要があります。そうすれば、自分のクラスを作成できます(またはより高度なことを実行できます)。これには、 (または)で独自の(実装するための)およびリスナー処理ロジックを設定することが含まれます。ListenerControllerModelrepaint()ComponentinterfaceViewControllerModel

Lombok PGは、後者からボイラープレートを取り出します。

akf別の方法を提供します。コードにControllerとしてを登録します。このアプローチの利点は、コードが特定のコードに関連付けられないことですが、欠点は、コードがコードに関連付けられることです。私はさまざまなUI実装(Swing、GWT、JSPなど)でコードを再利用する傾向があるため、特定のユーザーアクションやアトミックユーザーアクションに依存することはありません。ActionListenerViewViewControllerControllerViewControllerControllerModelView

于 2012-08-03T23:35:15.893 に答える
2

親GUIへの参照をActionListenerカスタムパネルに渡すことができます。その後、カスタムパネルで、ActionListener実装する親クラスをすべてのボタンなどに登録できます。

その後、親クラスは各アクションで通知を受け取ります。

于 2012-08-03T23:38:10.370 に答える