gpt4 book ai didi

java - JLabel mousePressed 相同的标签根据状态不同的操作

转载 作者:行者123 更新时间:2023-12-01 13:14:09 26 4
gpt4 key购买 nike

所以我有一个标签,我想做下一个,默认情况下它以红色背景颜色开始,当我第一次单击(鼠标按下)时,我将背景颜色更改为绿色。

现在,我希望当我第二次按下它时,一旦我再次按下它,它就会变回红色。

就像是红色的,变成绿色的。如果它是绿色的,则变为红色。

但是我没能做到正确......我尝试了这样的事情:

    Object o = evt.getSource();
boolean checkGreen = false;

if (o.equals(lblSI)) {
lblSI.setBackground(Color.GREEN);
checkGreen = true;
}
if (o.equals(lblSI) && checkGreen == true) {
lblSI.setBackground(Color.RED);
}

但它显然不起作用,因为我先把它变成绿色,然后变成红色,它是即时变化,找不到正确的代码......

最佳答案

您可以使用else来执行不同的操作。但是,绿色的状态需要是对象字段的一部分,而不是在操作方法中定义(因为每个操作都会将其重置为 false)。

如果将源检查和颜色选择检查分开,可能也会更清楚。

... object definition ...
boolean isGreen = false;

... action listener...
Object o = evt.getSource();

if (o.equals(lblSI)) {
if (isGreen) {
lblSI.setBackground(Color.RED);
} else {
lblSI.setBackground(Color.GREEN);
}
isGreen = !isGreen;
}

添加一个将前景色设置为背景色的完整示例并不适用于所有平台。

public class RedGreen implements Runnable {

private JButton press;

@Override
public void run() {
JFrame frame = new JFrame("RedGreen");
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
press = new JButton("Press");
press.addActionListener(new ActionListener() {
boolean isGreen = false;
@Override
public void actionPerformed(ActionEvent e) {
if (isGreen) {
press.setForeground(Color.RED);
} else {
press.setForeground(Color.GREEN);
}
isGreen = !isGreen;
}
});
frame.getContentPane().add(press);
frame.pack();
frame.setVisible(true);
}

public static void main(String...args) throws Exception {
SwingUtilities.invokeAndWait(new RedGreen());
}
}

关于java - JLabel mousePressed 相同的标签根据状态不同的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22595445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com