用户界面- Java, actionPerformed()中的if语句没有执行


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()信息判断它应该执行。有什么问题吗?

在执行这一行时声明了一个局部变量:

JButton btnA=new JButton("A");

成员字段btnA保持未初始化状态。将行改为:

btnA=new JButton("A");

(顺便说一下,这里有一个安全的情况-甚至可能更清楚地表达您的意图-使用==而不是调用equals()。)

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

actionPerformed中的btnA将为null

以下语句:

JButton btnA=new JButton("A");

显示类成员btnA。将其替换为:

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

JButton btnA=new JButton("A");,此操作的范围仅在构造函数中。所以它在actionPerformed函数

中是未知的

改为

btnA=new JButton("A"); 

相关内容

  • 没有找到相关文章

最新更新