单击更改JButton的颜色将不起作用

Dom*_*ell 1 java swing

public class LevelEditorButton extends JButton
{
/**
 * 
 */
private static final long serialVersionUID = 1L;
private int i;

public int getState()   {return i;}
public void increaseState()
{
    if(i == 2)
        i = 0;
    else
        i++;
    changeState();
}

public LevelEditorButton()
{
    i = 0;
    changeState();
    this.setOpaque(true);
}
public void changeState()
{
    if(i == 0)
        this.setBackground(Color.GREEN);
    else if(i == 1)
        this.setBackground(Color.RED);
    else 
        this.setBackground(Color.BLACK);
    this.setOpaque(true);
}
}

public class ChangeColorButtonListener extends LevelEditorButton implements ActionListener
{
     @Override
     public void actionPerformed(ActionEvent ae) 
    {
    this.increaseState();
    }

}
Run Code Online (Sandbox Code Playgroud)

在我的Mac上进行编程总是会给我带来JButton的奇怪错误,所以我有点迷失在哪里.当我调试它时,它显示按钮的颜色已更改但不会显示在屏幕上.我尝试过repaint(),revalidate()和updateUI().任何帮助将不胜感激.

Ant*_*hea 5

问题是你永远不会将ActionListener应用于按钮.两个解决方案:

创建一个构造函数并将其自身应用为侦听器

ChangeColorButtonListener(){
        this.addActionListener(this);
    }
Run Code Online (Sandbox Code Playgroud)

或者在调用类中这样做:

ChangeColorButtonListener  ccb = new ChangeColorButtonListener();
ccb.addActionListener(ccb);
Run Code Online (Sandbox Code Playgroud)