仅使用 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()
return 是一个字符串 - 并且很可能总是 return "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
}
}
这可能是处理此行为的更简洁的方法,因为无论页面上发生了什么,按下按钮都会在设置背景绿色和红色之间交替。
所以我想做的是创建一个按钮,当点击时,背景颜色变为绿色。一旦再次点击,它就会变成红色。并基本上重复。所以我正在寻找一些帮助,告诉我如何做到这一点。
这是我目前所做的
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()
return 是一个字符串 - 并且很可能总是 return "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
}
}
这可能是处理此行为的更简洁的方法,因为无论页面上发生了什么,按下按钮都会在设置背景绿色和红色之间交替。