Java,如果actionPerformed()内的语句没有执行

时间:2014-03-20 13:30:50

标签: java user-interface

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

public class MyGUI extends JFrame implements ActionListener
{
    JButton btnA;
    public MyGUI()
    {
        setTitle("Test GUI");
        setSize(500, 500);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setResizable(false);
        setLayout(null);
        setLocationRelativeTo(null);

        JButton btnA=new JButton("A");
        btnA.setSize(100, 20);
        btnA.setLocation(0, 0);
        btnA.addActionListener(this);

        add(btnA);
    }

    public void actionPerformed(ActionEvent e)
    {
        System.out.println(e.toString());
        System.out.println("Action detected");
        if(e.getSource().equals(btnA))
            System.out.println("A was pressed");
    }
}

我开始使用Java GUI。我有一个按钮。但是,当我单击该按钮时,第三个print语句不会执行,即使它应该是,从事件的toString()信息判断。怎么了?

4 个答案:

答案 0 :(得分:8)

执行此行时,您将声明一个局部变量:

JButton btnA=new JButton("A");

成员字段btnA仍然未初始化。将行更改为:

btnA=new JButton("A");

(顺便说一句,这里有一个安全的例子 - 甚至可能更明确地表达你的意图 - 使用==代替调用equals() 。)

答案 1 :(得分:4)

您没有在构造函数中使用实例变量btnA,而是使用局部变量btnA。这意味着你的实例变量btnA仍然是空的。

来自actionPerformed的btnA将为null。

答案 2 :(得分:2)

以下声明:

JButton btnA=new JButton("A");

为您的班级成员btnA添加阴影。替换为:

btnA=new JButton("A"); // Without the type declaration

答案 3 :(得分:2)

JButton btnA=new JButton("A");这个范围只在构造函数中。所以在actionPerformed函数

中不知道

将其更改为

btnA=new JButton("A");