简体   繁体   中英

How to randomly select a button in a ButtonGroup of JRadioButtons?

I want to have a random radio button to be selected whenever this panel gets initialized, but I'm not sure how/if I can do that.

Is there a way to get a random button from the group and select it?

import javax.swing.*;

public class RandomPanel extends JPanel
{
    private ButtonGroup buttonGroup;
    private String[] buttonText =
            {
                    "Red",
                    "Mashed Potatoes",
                    "Metal",
                    "Running",
                    "Butts",
                    "Turquoise"
            };

    public RandomPanel()
    {
        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        setBorder(BorderFactory.createTitledBorder("Random Selections"));

        buttonGroup = new ButtonGroup();
        for (String text : buttonText)
        {
            JRadioButton option = new JRadioButton(text);
            add(option);
            button.add(option);
        }
    }

}

您可以做的是保留所有创建的单选按钮的列表/数组,然后使用按钮组的setSelected()方法设置所选内容,如下所示

buttonGroup.setSelected(buttonsArray[randomButtonNum].getModel(), true);

Try using the Random class .

    // Library location
    import java.util.Random;

    //Inside some method
    Random r = new Random();
    randomIndex = r.nextInt(buttonText.length());
    text = buttonText[randomIndex];

This will need arranging to suit your implementation, whats shown is a 'how-to' usage.

Note: the argument to nextInt(args) is exclusive. ie will return 0 <= x < args

I believe you are looking for something like the solution below.

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.*;

public class RandomPanel extends JPanel
{
    private ButtonGroup buttonGroup;
    private String[] buttonText =
            {
                    "Red",
                    "Mashed Potatoes",
                    "Metal",
                    "Running",
                    "Butts",
                    "Turquoise"
            };

    private JRadioButton[] radioButton;

    Random r = new Random();

    public RandomPanel()
    {
        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        setBorder(BorderFactory.createTitledBorder("Random Selections"));

        buttonGroup = new ButtonGroup();

        radioButton = new JRadioButton[buttonText.length];

        for(int rb=0; rb<buttonText.length; rb++)
        {
            radioButton[rb] = new JRadioButton(buttonText[rb]);
            add(radioButton[rb]);
            buttonGroup.add(radioButton[rb]);
        }

        JButton b = new JButton("Random");
        b.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                selectRandomButton();
            }
        });

        add(b);
    }

    public void selectRandomButton()
    {
        radioButton[r.nextInt(radioButton.length)].setSelected(true);
    }

    public static void main(String[] args)
    {
        JFrame f = new JFrame("Test Random Button");
        f.setSize(300, 300);
        f.setLocationRelativeTo(null);;
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        f.add(new RandomPanel());

        f.setVisible(true);;
    }
}

I created a small method that allow me to set any radio group button. Very convenient if you don't want to use if for any radio button.

public void setButtonGroup(int rdValue, Enumeration elements ){
    while (elements.hasMoreElements()){
        AbstractButton button = (AbstractButton)elements.nextElement();
        if(Integer.parseInt(button.getActionCommand())==rdValue){
            button.setSelected(true);
        }
    }
}

then

setButtonGroup(randomIndex, yourButtonGroup.getElements());

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM