java - 仅使用 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
's 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
}
}
这可能是处理这种行为的更简洁的方法,因为按下按钮将在设置背景绿色和红色之间交替,而不管页面上发生了什么。
推荐阅读
- reactjs - 将问题发送到 React 翻译文档的正确位置是什么?
- go - Read interface param (p []byte) 读取后字节长度变为512
- flutter - 如何在没有身份验证的情况下获取 Spotify 音乐列表
- html - 在 Woocommerce 中提交评论后如何显示消息?
- sql - 恢复时违反 Postgresql 约束
- rust - 遍历 Vec 时如何更新 HashMap
- jquery - 更改图片 onclick wordpress/ACF
- azure - 在 Azure 标识、Microsoft Graph 授权和 Microsoft 标识之间共享凭据
- ajax - ajax调用asp.net mvc 5控制器,参数返回null
- dart - 将 Dart 与 Redux (package:redux) 一起使用时,输入验证应该去哪里?