繁体   English   中英

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

[英]how to change background color back and forth eg red and green when clicked using only 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
    }
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM