dポイントプレゼントキャンペーン実施中!

JFrame の上に JPanel があり、JPanel の上に JButton があるとします。
JButton が押されたことを JFrame に知らせるにはどうしたらいいでしょうか。

わかるところまで書いてみました。

class MyFrame extends JFrame implements ActionListener {

MyPanel myPanel = new MyPanel();

MyFrame() {

myPanel.addActionListener(this);
add(myPanel);

}

public void actionPerformed(ActionEvent e) {

System.out.println("The button on the MyPanel was pressed!");

}

public static void main(String[] args) {

new MyFrame();

}
}

class MyPanel extends JPanel implements ActionListener {

JButton button1 = new JButton();

MyPanel() {

button1.addActionListener(this);
add(button1);

}

public void actionPerformed(ActionEvent e) {

}
}

A 回答 (2件)

コードが根本的におかしいです。


myPanelのActionListenerはどこで呼ばれるのですか?
MyFrameやMyPanelで別のクラスのためのActionListenerをimplementsするのも良くありません。
そもそも明らかに動かないコードです。イベント処理の前にもっと基本的なSwingのプログラムを書いてみましょう。

本題ですが簡単な方法としては、button1のActionListenerにMyFrameインスタンスへの参照を持たせる方法があります。
MyFrameに受け取り用のメソッドを用意して、それをbutton1のActionListenerから呼び出します。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございました。

お礼日時:2009/07/05 10:42

 こんにちは。


 一番、簡単な方法で言えば、こんな感じじゃないでしょうか。
(コンパイルするときは全角スペースを半角スペースに変換してからにしてください)

class MyFrame extends JFrame implements ActionListener {

  MyPanel myPanel = new MyPanel();

  MyFrame() {
    myPanel.button1.addActionListener(this);
    add(myPanel);
  }

  public void actionPerformed(ActionEvent e) {
    System.out.println("The button on the MyPanel was pressed!");
  }

  public static void main(String[] args) {
    new MyFrame();
  }
}

class MyPanel extends JPanel implements ActionListener {

  JButton button1 = new JButton();

  MyPanel() {
    add(button1);
  }
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!