所以我想做的是创建一个按钮,当点击时,将背景颜色变成绿色。一旦它再次点击,它就会变成红色。基本上重复。所以我在寻求一些帮助,告诉我如何做到这一点。
这就是我到目前为止所做的
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()
返回一个String,并且当他们单击您的按钮时,很可能总是返回"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
}
}
这可能是处理这种行为的更干净的方法,因为无论页面上发生了什么,按下按钮都会在背景设置为绿色和红色之间交替。