0

私はJavaでGUIスキルを練習していて、メニューとメニューバーをやっています。それらは私には問題なく意味がありますが、どこでそれらについてもっと学ぶことができるかについて質問があります。

私が行った基本的なメニューであるActionListener関数actionPerformedは、メニューと同じクラスにある必要があり、メニューが変更される項目も、メニューと同じクラスにある必要があります。

別のクラスのコンストラクターによって作成され、フレームに配置されたJPanelに影響を与えるメニューが必要な場合はどうなりますか。メニューがそのコンポーネントをどのように変更できるかわかりません。

皆さんが役立つと思ったヒント、ヒント、またはサイトは、事前に感謝します。

4

1 に答える 1

3

メニューバーのアクションをActionオブジェクトにラップすると便利だと思います。これはカプセル化します:

  1. アクションの名前とアイコン
  2. 有効または無効の場合
  3. (チェックボックスアクションの場合)選択されている場合
  4. アクションのキーボードショートカット
  5. アクションリスナーの実装

AbstractActionそのアクションが作用するデータを持つクラスでのサブクラスを定義します。次に、そのアクションのゲッターを定義して、メニュー作成コードがそれを取得できるようにします。Actionメニューに直接追加できます-aMenuItemは自動的に作成されます。

アクションの他の利点は、同じアクションをボタンやツールバーなどで使用できることです。

class ModelClass {
   int value;
   Action incAction = new AbstractAction("Increment") {
      public void actionPerformed() {
         value++;
         setEnabled(value < 10);
      }
   };

   public Action getIncAction() {
      return incAction;
   }
}

class UIClass {
   void buildMenu() {
      JMenu menu = new JMenu("Model");
      menu.add(model.getIncAction());
   }
}
于 2012-01-09T17:34:28.390 に答える