在Java Swing中禁用按钮后无法启用

5
我刚开始学习Java Swing,并一直在尝试创建一个简单的游戏,类似于扫雷。窗口中有一个按钮矩阵,只有1个地雷。点击按钮,如果不是地雷,则禁用该按钮并显示绿色,如果是地雷,则禁用该按钮并显示红色。我通过将按钮背景设置为所需颜色来显示颜色,并且迄今为止实现得很好。接下来,我添加了一个复位按钮,点击它将使用setEnabled(true)重新启用所有按钮。

但由于某些原因,该按钮无法启用。我确认程序流程到达启用按钮的代码,但我找不到原因为什么它不起作用。

这是我写的一个测试程序,其中包含一个复位按钮和1个按钮。出现了同样的问题。是否有人能指出我可能做错了什么?

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;


public class Test implements ActionListener{

    JFrame frame = new JFrame("Mine");
    JButton buttons = new JButton();
    JButton reset = new JButton("Reset");
    Container grid = new Container();   

    public Test(){

        frame.setSize(400, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

        frame.setLayout(new BorderLayout());
        frame.add(reset, BorderLayout.NORTH);
        reset.addActionListener(this);

        buttons = new JButton();
        buttons.addActionListener(this);    

        frame.add(buttons, BorderLayout.CENTER);
    }

    public static void main(String[] args){

        new Test();
    }

    @Override
    public void actionPerformed(ActionEvent event) {

        if(event.getSource().equals(reset))
            buttons.setEnabled(true);

        else{
            if(event.getSource()==buttons){
                buttons.setBackground(Color.RED);
                buttons.setEnabled(false);
            }

        }

    }
}

1
只是一个建议:在将所有组件添加到内容面板后,应该使您的框架可见。而不是显式地设置框架的大小,请在使其可见之前调用“pack()”方法。 - dic19
3
它确实会被启用。你只是从未重置背景颜色。 - kiheru
1个回答

8

实际上,当您单击重置时,它将被启用,您忘记的是重置颜色:

@Override
public void actionPerformed(ActionEvent event) {

    if(event.getSource().equals(reset)){
        buttons.setEnabled(true);
        buttons.setBackground(null);
    }else{
        if(event.getSource()==buttons){
            System.out.println("xxx");
            buttons.setBackground(Color.RED);
            buttons.setEnabled(false);
        }

    }

}

是的,那正是我的问题。非常感谢。现在它运行得很好。 - Rajesh Bhat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接