我试图制作一个按钮点亮的游戏,用户必须在给定时间内按下按钮。
目前,我的程序有12个按钮可以执行某些操作。我试图让这些按钮被程序随机调用。到目前为止,我只有12个按钮,只需在用户按下时更改文本。
现在我需要一种方法来使它们随机按下程序本身而不是用户。有关于如何在java中完成此操作的任何想法吗?
// **** Panels for buttons ****
JPanel panelButtons = new JPanel(); // making the panel for the buttons
panelButtons.setLayout(new GridLayout(3, 4)); // setting the layout of the buttons to 3x4 as shown above
b1 = new JButton(" ⃝"); // creating button and setting its default text
b1.setFont(fontText); // setting the font
b1.addActionListener(new ActionListener(){ // action listener to do something when pressed
public void actionPerformed(ActionEvent e) {
sendMessage(user + "1" ); // sends the name of the user that pressed the button and which button
String field1 = b1.getText(); // gets the text from the button and stores it in a String
if(field1 == " ⃝"){ // checks if the string is equal to an empty circle
b1.setText("⬤"); // if true then change to a full circle
}
else if (field1 == "⬤"){ // opposite of the above if statement
b1.setText(" ⃝");
}
}
});
panelButtons.add(b1); // adding the button to the panel
b2 = new JButton(" ⃝"); // creating button and setting its default text
b2.setFont(fontText); // setting the font
b2.addActionListener(new ActionListener(){ // action listener to do something when pressed
public void actionPerformed(ActionEvent e) {
sendMessage(user + "2" ); // sends the name of the user that pressed the button and which button
String field2 = b2.getText(); // gets the text from the button and stores it in a String
if(field2 == " ⃝"){ // checks if the string is equal to an empty circle
b2.setText("⬤"); // if true then change to a full circle
}
else if (field2 == "⬤"){ // opposite of the above if statement
b2.setText(" ⃝");
}
}
});
panelButtons.add(b2); // adding the button to the panel
答案 0 :(得分:2)
您可以创建一个包含按钮的列表。使用随机数生成器在列表的长度内创建一个随机数。使用该(随机)索引修改相应的按钮。
答案 1 :(得分:0)
Consumer<JButton>'(use
Callable`(并忽略返回),或者只是在不使用java 8的情况下创建类似的东西。创建一个实现ActionListener
的类,如下所示:
private static class Listener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
button2action.get((JButton)e.getSource()).accept(a);
}
}
如果要按下随机按钮,请从地图的值集中选取一个随机元素。
int randomIndex = new random().nextInt(button2action.entrySet().size());
Iterator<Entry<JButton, Consumer<JButton>>> iter = button2action.entrySet().iterator();
for (int i = 0; i < randomIndex; i++){
Entry<JButton, Consumer<JButton>> entry = iter.next();
}
entry.getValue().accept(entry.getKey());
如果要添加新按钮,请向地图添加新的按钮操作对。