我的程序如何随机按下按钮?

时间:2015-03-25 10:42:57

标签: java button random jframe

我试图制作一个按钮点亮的游戏,用户必须在给定时间内按下按钮。

目前,我的程序有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

2 个答案:

答案 0 :(得分:2)

您可以创建一个包含按钮的列表。使用随机数生成器在列表的长度内创建一个随机数。使用该(随机)索引修改相应的按钮。

答案 1 :(得分:0)

  1. 将十二个按钮放入有序集合中。
  2. 将您的12个相应动作放在另一个有序集合中,形式为Consumer<JButton>'(use Callable`(并忽略返回),或者只是在不使用java 8的情况下创建类似的东西。
  3. 执行从Button集合到操作集合的映射。
  4. 创建一个实现ActionListener的类,如下所示:

    private static class Listener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            button2action.get((JButton)e.getSource()).accept(a);
        }
    }
    
  5. 如果要按下随机按钮,请从地图的值集中选取一个随机元素。

    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()); 
    
  6. 如果要添加新按钮,请向地图添加新的按钮操作对。