5

JavaSwingを使用して単純なワードプロセッサを作成していると想像してください。テキストの位置揃えを実行するために作成された一連のアクションがあります。メニューバーにメニューがあります:

意見
  左揃え
  センタージュシティ
  右寄せ

これは、JRadioButtonMenuItemsとButtonGroupで構成され、一度に1つのアイテムのみが選択されるようにします。

また、JToggleButtonsとButtonGroupで構成される同等のツールバーがあり、一度にアクティブにできるのはボタンだけであることを確認するとします。

「左揃え」のJRadioButtonMenuとJToggleButtonは、他のアイテムと同じアクションを使用して初期化されます。

私の質問はこれです:2つのグループを同期するための最良の方法は何ですか?ツールバーの「右揃え」アイコンをクリックすると、それに応じてメニューのグループが更新されます。その逆も同様です。

4

5 に答える 5

1

オブザーバーパターンの友よ。メニュー バーはツールバーを観察し、ツールバーはメニュー バーを観察します。それらはオブザーバーとオブザーバブルの両方になります。それぞれに独自のリスナーがあり、変更イベントで、オブザーバー (もう一方) にパラメーターの新しい値を通知します。

オブザーバー パターンの大きな利点の 1 つは、カップリングが非常に低いことです。そのため、リンクを実装したり、変更したり、将来的に削除したりするために多くのリファクタリングを行う必要はありません。

于 2009-08-13T19:01:02.473 に答える
0

Swing アクションを使用している場合、アクション自体が有効であれば、コンポーネントは自動的に無効化/有効化されます。自分自身を propertyListener としてアクションに登録して、他の変更を監視することもできます。使用可能なプロパティの詳細なリストについては、 http://java.sun.com/javase/6/docs/api/javax/swing/Action.htmlを参照してください。

于 2009-08-13T12:42:48.503 に答える
0

一方(私も)、外部クラスに1つのリスナーを書くだけで済みます。メニューとツールバーのリスナー。1 が変更されると、リスナーは両方を新しい値に設定します。

于 2009-08-13T19:04:26.523 に答える
0

Mediator Design Patternを見てみましょう

于 2009-08-13T10:25:55.917 に答える