所以我有一个标签,我想要做下一个,默认情况下它从红色背景颜色开始,当我第一次点击(mousePressed)时,我将背景颜色更改为绿色。
现在,我希望它再次按下它再次按下它再次按下红色。
如果它是红色的话,变成绿色。 如果它是绿色,则变为红色。
但是我无法做到这一点......我尝试过这样的事情:
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);
}
但它显然不起作用,因为我先把它变成绿色,然后是红色,它是瞬间变化,无法找到合适的代码......
答案 0 :(得分:1)
您可以使用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());
}
}
答案 1 :(得分:0)
在这里,我们采取一种非常干净的方式。我希望这能回答你的问题。
public class MyLabel extends JLabel implements MouseListener {
private boolean isRed;
private boolean isGreen;
private boolean first_time = true;
public MyLabel(String name) {
super(name);
this.isRed = true;
this.isGreen = false;
this.setOpaque(true);
this.addMouseListener(this);
this.setBackground(Color.red);
}
public void setRed(boolean val) {
isRed = val;
}
public void setGreen(boolean val) {
isGreen = val;
}
public boolean getRed() {
return isRed;
}
public boolean getGreen() {
return isGreen;
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
if (first_time) {
first_time = false;
this.setGreen(true);
this.setRed(false);
}
if (getRed()) {
this.setBackground(Color.red);
this.setGreen(true);
this.setRed(false);
}
else if (getGreen()) {
this.setBackground(Color.green);
this.setGreen(false);
this.setRed(true);
}
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
}
接下来:
public class TestFrame extends JFrame {
public TestFrame() {
JLabel label = new MyLabel("Name of Label");
this.add(label);
this.setVisible(true);
pack();
}
}
最后主要方法是:
public class Main {
public static void main(String[] args) {
new TestFrame();
}
}
如果您对我做的事有任何疑问,请随时问我。这就是我通过提问来学习如何更好地编码的方法。所有最好的编码:)