1

私のスイングGUIには、データ行と多数のボタンがあり、ユーザーは多数のアイテムを選択してからボタンを選択します。

各ボタンはデータに異なるルールを適用するため、ボタンごとに異なる関数を呼び出す必要があります.MVCデザインパターンを使用しています.ボタンごとに異なるニーズをどのように処理すればよいですか?

  1. JButton を拡張するクラス 'MyButton' を作成し、これにある種の Enum を指定します。次に、1 つのアクション リスナーを作成し、Enum を調べて ActionListener でどのボタンが押されたかを確認します。

  2. 上記と同様ですが、ボタンごとに異なるクラスを使用し、instanceof を使用してどのボタンが押されたかを判断します。

  3. ボタンごとに個別の ActionListener を実装する

  4. 他の?

ある場合、どの方法を使用するのが最善ですか? どんなアドバイスでも大歓迎です!

4

3 に答える 3

1

ボタンごとに個別のリスナーを実装します。

まず、それが通常の解決策だからです。2 つ目は、クリックされたときに別のことをするためだけに JButton を拡張する理由がないことです。それが ActionListener の役割です。Swing コンポーネントはそのまま使用するように設計されており、通常は拡張しないでください。

于 2013-02-18T16:06:48.623 に答える
0

質問が正しければ、広告申込情報にデータがあり、すべての広告申込情報にボタンがあり、ボタンを押すと広告申込情報に関連するルールが呼び出されます。

もしそうなら、

  • 2番目のアプローチを採用する場合は、今後新しい広告申込情報が追加されるたびに、アクションリスナー内でコーディングする必要があります。
  • 3番目のアプローチも上記と同じ意味を持ちます

最初のアプローチはかなり良いですね。列挙型変数とそれぞれのルールでキー設定されたハッシュマップを持つことができるファクトリを持つことができます。アクションリスナー内で、ファクトリからルールを取得して呼び出します。

このようにして、関心の分離を適切に行うことができ、アクションリスナーは、ルールやデータ項目の知識がなくてもコントローラーとして機能します。

于 2013-02-18T16:13:19.777 に答える
0

これは MVC です。ロジック (アクション内) とビュー (ボタン) を分離します。

列挙型を使用したり、JButton をサブクラス化する必要はありません。ボタンが何十個もある場合にクリーンな状態を保つためにできることは、Action インスタンスを作成するためのファクトリ クラスです。

于 2013-02-18T16:09:48.343 に答える