ActionListener在JButton上不起作用

ActionListener在JButton上不起作用

我编写了一个代码,以在一个面板的三个面板上显示三个按钮
网格布局的框架。
目的是
-单击按钮时更改按钮的颜色
-最初所有三个都是黑色的

该代码运行正常,除了按钮的颜色未更改
点击。
任何人都可以指出问题或对其进行调试。

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class gui extends JFrame implements ActionListener {

    JPanel p1, p2, p3;
    JButton b1, b2, b3;

    public gui() {
        setLayout(new GridLayout(3, 1));
        JPanel p1 = new JPanel(new GridLayout(1, 1));
        JPanel p2 = new JPanel(new GridLayout(1, 1));
        JPanel p3 = new JPanel(new GridLayout(1, 1));
        JButton b1 = new JButton();
        JButton b2 = new JButton();
        JButton b3 = new JButton();
        b1.setBackground(Color.BLACK);
        b2.setBackground(Color.BLACK);
        b3.setBackground(Color.BLACK);
        b1.addActionListener(this);
        p1.add(b1);
        b2.addActionListener(this);
        p2.add(b2);
        b3.addActionListener(this);
        p3.add(b3);
        add(p1);
        add(p2);
        add(p3);
    }

    public void actionPerformed(ActionEvent e) //function to handle click
    {
        if (e.getSource() == b1) {
            b1.setBackground(Color.RED);
        } else if (e.getSource() == b2) {
            b1.setBackground(Color.YELLOW);
        } else if (e.getSource() == b3) {
            b3.setBackground(Color.BLUE);
        }
    }

    public static void main(String[] args) {
        gui ob1 = new gui();
        ob1.setSize(1000, 500);
        ob1.setLocation(100, 100);
        ob1.setVisible(true);
        ob1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

最佳答案

您必须使用[也适用于面板]来初始化按钮

 b1 = new JButton();
 b2 = new JButton();
 b3 = new JButton();


因为您正在创建隐藏全局变量的局部变量

JButton b1 = new JButton();//local variables
JButton b2 = new JButton();
JButton b3 = new JButton();

在第二个if条件中,您必须更改b2的颜色而不是b1

     else if(e.getSource()==b2){

            //b1.setBackground(Color.YELLOW);
            b2.setBackground(Color.YELLOW);

            }

始终使用.equals()而不是==比较对象

   e.getSource().equals(b1)

关于java - ActionListener在JButton上不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31250852/

10-11 20:49