3

Java で初めてイベント ベースの GUI を作成しましたが、どこが間違っているのかわかりません。イベント処理が適用されていない場合、コードは正常に機能しました..

これがコードです。

package javaapplication1;

import javax.swing.*;
import java.awt.event.*;

 class Elem implements ActionListener{

    void perform(){
        JFrame frame = new JFrame();
        JButton button;
        button = new JButton("Button");
        frame.getContentPane().add(button) ;
        frame.setSize(300,300);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        button.addActionListener(this);
     }

    public void actionPerformed(ActionEvent ev){
        button.setText("Clicked");
    }
}

 public class JavaApplication1 {

  public static void main(String[] args) {
   Elem obj = new Elem();
   obj.perform();
  }  
}
4

2 に答える 2

2

buttonメソッド内でオブジェクトを使用したようにactionPerformed。したがって、buttonグローバルに宣言します。

class Elem implements ActionListener{
     JButton button;// Declare JButton here.
    void perform(){
        JFrame frame = new JFrame();

        button = new JButton("Button");
        frame.getContentPane().add(button) ;
        frame.setSize(300,300);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        button.addActionListener(this);
     }

    public void actionPerformed(ActionEvent ev){
        button.setText("Clicked");
    }
}

 public class JavaApplication1 {

  public static void main(String[] args) {
   Elem obj = new Elem();
   obj.perform();
  }  
}
于 2013-11-12T10:49:59.213 に答える
2

変数のスコープに問題があります。JButton button;定義をperform()メソッドの外に移動して、actionPerformed()アクセスできるようにします。

JButton button;

void perform(){
    JFrame frame = new JFrame();
    button = new JButton("Button");
    frame.getContentPane().add(button) ;
    frame.setSize(300,300);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    button.addActionListener(this);
 }

メソッド内 (例: perform()) でオブジェクトを定義すると、そのスコープはそのメソッド (中括弧内) に限定されます。これは、クラス内の他のメソッドがその変数にアクセスできないことを意味します。

オブジェクト定義をメソッドの外に移動することで、クラス レベルのスコープを持つようになりました。これは、そのクラス内のすべてのメソッドが変数にアクセスできることを意味します。内でその値を定義していますがperform()、 を含む他のメソッドからアクセスできるようになりましたactionPerformed()

詳細については、こちらを参照してください。

于 2013-11-12T10:50:13.027 に答える