【发布时间】:2020-12-29 18:13:00
【问题描述】:
if condition working for only one button at a time我已经编写了 9 个 Jbuttons 以在鼠标单击时随机返回 8 种颜色中的一种。我添加了一个返回结果的 Jlabel - 我希望结果返回一个“赢家!”如果所有 Jbutton 的颜色相同,则为字符串。
这是完整的代码!
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import static java.awt.Color.*;
public class buttonTest {
public static void main(String[] args) {
new buttonTest();
}
public buttonTest() { //CONSTRUCTOR.
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("Colour Button 4.0");
frame.add(new colourButton());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class colourButton extends JPanel implements ActionListener {
Random rand = new Random();
JButton buttons[]; // created a button array.
JLabel gameRules = new JLabel("Match the colour buttons.");
JLabel timer = new JLabel("00:00 (placeholder)");
JLabel result = new JLabel("Result: (placeholder)");
byte value = 0;
public colourButton() {
add(gameRules);
buttons = new JButton[9];
setLayout(new GridLayout(3, 3));
for (int i = 0; i < buttons.length; i++) {
buttons[i] = new JButton("colour button");
buttons[i].setBorderPainted(false);
buttons[i].setContentAreaFilled(false);
buttons[i].setOpaque(true);
buttons[i].addActionListener(this);
add(buttons[i]);
add(timer);
add(result);
setVisible(true);
}
}
@Override
public void actionPerformed(ActionEvent e) {
if (!(e.getSource() instanceof JButton)) {
return;
}
String clickedbutton = e.getActionCommand();
System.out.println(clickedbutton + " button clicked.");
JButton button = (JButton) e.getSource();
value++;
value %= 9;
switch (rand.nextInt(9)) {
case 0:
button.setBackground(null);
case 1:
button.setBackground(red);
break;
case 2:
button.setBackground(orange);
break;
case 3:
button.setBackground(yellow);
break;
case 4:
button.setBackground(green);
break;
case 5:
button.setBackground(cyan);
break;
case 6:
button.setBackground(blue);
break;
case 7:
button.setBackground(MAGENTA);
break;
case 8:
button.setBackground(pink);
break;
}
if (button.getBackground() == magenta) {
result.setText("magenta");
} else {
result.setText("placeholder result");
}
}
}
}
我想它在逻辑上是这样的:
如果按钮数是 9 并且都是 'this' 颜色,则返回这个字符串。
【问题讨论】:
-
提供清晰的描述,显示所有相关代码,并准确告诉我们哪些(不)有效。
-
循环遍历按钮列表并比较每个调用
actionPerformed方法的结果 -
另外,如果您可以添加 UI 图像并清楚地描述功能
-
更好的是,让每个按钮更新一个模型并检查它的获胜状态
-
好的,我已经添加了完整的代码 - 希望对您有所帮助!我还使用了一个按钮数组,我可以“展开循环”并将 9 个按钮放在 if 语句中吗?
标签: java swing if-statement colors jbutton