2016-05-21 4 views
0

Я хочу, чтобы случайная переключательная кнопка была выбрана всякий раз, когда эта панель инициализируется, но я не уверен, как/если я могу это сделать.Как случайно выбрать кнопку в ButtonGroup JRadioButtons?

Есть ли способ получить случайную кнопку из группы и выбрать ее?

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); 
     } 
    } 

} 

ответ

2

Что вы можете сделать, это сохранить список/массив всех переключателей, которые Вы создаете, а затем установить выбранный с помощью метода на кнопку группы setSelected(), что-то вроде этого

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

Да, это, кажется, самый простой способ сделать это. Благодаря! – Darakath

1

Пробуйте использовать класс Random.

// Library location 
    import java.util.Random; 

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

Для этого вам потребуется организовать в соответствии с вашей реализацией, что показано как «как».

Примечание: аргумент nextInt(args) является исключительным. т.е. вернет 0 <= x < args

+0

Как бы это реализовать в коде выше? Единственный способ, которым я знаю, как выбрать кнопку, - setSelected, и для параметра ButtonModel требуется параметр, который я не знаю, как получить. – Darakath

+0

Я думаю, что мой ответ слегка неверно истолкован из того, что вы задали сейчас ... но если у вас есть переменная, способная к индексу (массив и т. Д.), Содержащая все возможные кнопки, используйте приведенный выше код для выбора случайного индекса, затем используйте случайный индекс для доступа к переменной –

0

Я считаю, что вы ищете что-то вроде решения ниже.

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);; 
    } 
} 
0

Я создал небольшой метод, который позволяет мне установить любую группу радиогрупп. Очень удобно, если вы не хотите использовать, если для любого переключателя.

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

затем

setButtonGroup(randomIndex, yourButtonGroup.getElements());