仅使用1个jbutton单击时如何来回更改背景颜色,例如红色和绿色

问题描述

所以我想做的是创建一个按钮,单击该按钮时将背景色变为绿色。一旦再次点击它,它就会变成红色。并基本重复。因此,我正在寻找一些帮助,向我展示如何做到这一点。

这是我到目前为止所做的

class colorText implements ActionListener{
    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("Go")) {
            panel.setBackground(Color.GREEN);
        }
    }
}       

我尝试通过此方法来执行此操作,但出现错误,并且想知道如何解决它或采用新的方法

            if (e.getActionCommand() == Color.GREEN) {
            panel.setBackground(Color.RED);
        }

解决方法

您尝试的解决方案不起作用,因为(如我们从第一个示例中看到的那样),e.getActionCommand()返回一个字符串-并且当他们单击您的按钮时,可能总是返回"Go"

您需要的是某种确定状态的方法;告诉“我现在应该使背景变成红色”和“我现在应该使背景变成绿色”之间的区别。我想到了两种方法:

1)检查当前背景色

如果API允许您查询背景颜色并与常量进行比较,则可以像这样进行检查:

public void actionPerformed(ActionEvent e) {
    if (e.getActionCommand().equals("Go")) {
        if (panel.getBackground() == Color.RED) {
            panel.setBackground(Color.GREEN);
        } else { // could check for GREEN background here
            panel.setBackground(Color.RED)
        }
    }
}

这种方法的可能缺点:

  • 您可能无法(可靠地)读回您设置的颜色。要么它没有在panel的API中公开,要么由于某种原因您返回的值不等于Color常量(例如,读取的值具有alpha通道,而常量没有)
  • 仅当此方法是修改背景的唯一方法时,此方法才有效。如果有任何其他代码要修改背景,则您将无法准确记录上一次按钮的操作。这可能是一个大问题,因为这意味着此代码无法与其他功能很好地配合使用。

2)存储标志并每次翻转

此方法涉及存储一个显式字段,该字段使您知道将背景设置为下一个内容。可能是布尔值,就像这样:

private boolean greenIsNext = true
   
public void actionPerformed(ActionEvent e) {
    if (e.getActionCommand().equals("Go")) {
        Color nextColour = greenIsNext ? Color.GREEN : Color.RED
        panel.setBackground(nextColour);
        // Flip the flag
        greenIsNext = !greenIsNext
    }
}

这可能是处理此行为的更干净的方法,因为无论页面上发生了什么,按下按钮都会在设置背景绿色和红色之间交替。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...