質問

私はすべてのGUIのものを扱う別のクラスを起動するプログラムの主なクラスを持っています。 GUIで、私は私がにActionListenerを添付する必要がボタンを持っています。

唯一の問題は、実行されるコードは、メインクラス内に存在する必要がある。

ボタンを別の場所でクリックされたとき、私はメインクラスで実行するのactionPerformed()メソッドを取得できますか?

役に立ちましたか?

解決

あなたのコントローラ(「メイン」クラス)ActionListenerインタフェースを実装してください、そして、ビュークラスへの参照を渡します:

public class View extends JFrame {
  public View(final ActionListener listener) {
   JButton button = new JButton("click me");
   button.addActionListener(listener);
   button.setActionCommand("do_stuff");

   getContentPane().add(button);

   pack();
   setVisible(true);
  }
 }

 public class Control implements ActionListener {

  public Control() {
   new View(this);
  }

  @Override
  public void actionPerformed(ActionEvent e) {
   if (e.getActionCommand().equals("do_stuff")) {
    // respond to button click
   }
  }
 }

また、アクションを行うことができますするあなたは、コードの一片が、多くのボタンに対応する場所、それがより便利です。

他のヒント

そして、あなたのメインクラスのメソッドを呼び出して、ボタンのActionListenerとして、匿名内部クラスを実装します。これは、より少ない依存関係を作成し、メインクラスでActionListenerインタフェースを実装する促進する傾向があることを、タグ&スイッチスタイルのプログラミングを回避します。

いずれの場合も、それはあなたの依存関係グラフにサイクルが作成されます:メインクラスは、ボタンとボタンについて知っているメインクラスを呼び出す必要があります。それはそれは難しい、他の方法で物事を構成するようになりますので、これは良いアイデアではないかもしれません。しかし、更なる情報なしで、それは状況を判断したり、具体的な何かをお勧めするのは難しいです。

あなたのメインクラスでActionListenerを実装して、GUIのボタン上のリスナーとしてメインクラスのインスタンスを追加します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top