2016-05-21 15 views
0

Ich möchte ein zufälliges Optionsfeld haben, das ausgewählt wird, wenn dieses Panel initialisiert wird, aber ich bin nicht sicher, wie/ob ich das tun kann.Wie wählt man zufällig eine Schaltfläche in einer ButtonGroup von JRadioButtons?

Gibt es eine Möglichkeit, eine zufällige Schaltfläche aus der Gruppe zu erhalten und auszuwählen?

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

} 

Antwort

2

Was können Sie tun, halten, ist eine Liste/Array aller Radiobuttons Sie erstellen und dann die setSelected() -Methode, so etwas wie dieses

die über die Schaltfläche Gruppe ausgewählt eingestellt
buttonGroup.setSelected(buttonsArray[randomButtonNum].getModel(), true); 
+0

Ja, das scheint der einfachste Weg zu sein. Vielen Dank! – Darakath

1

Verwenden Sie die Klasse Random.

// Library location 
    import java.util.Random; 

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

Dies muss arrangieren, um Ihre Implementierung anzupassen, was gezeigt wird, ist eine How-to-Nutzung.

Hinweis: Das Argument zu nextInt(args) ist exklusiv. dh kehrt 0 <= x < args

+0

Wie würde sich dies in dem obigen Code umgesetzt werden? Der einzige Weg, wie ich eine Schaltfläche auswählen kann, ist über setSelected, und das erfordert ein ButtonModel als Parameter, von dem ich nicht weiß, wie ich es bekomme. – Darakath

+0

Ich denke, meine Antwort ist etwas missverstanden von dem, was Sie jetzt gefragt haben ... aber wenn Sie eine indexierbare Variable (Array usw.) haben, die alle möglichen Schaltflächen enthält, verwenden Sie den obigen Code, um einen zufälligen Index auszuwählen, und verwenden Sie dann den Zufallsindex Zugriff auf die Variable –

0

Ich glaube, Sie suchen nach etwas wie die Lösung unten.

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

Ich habe eine kleine Methode, die mir erlauben, jede Radiogruppe Taste. Sehr praktisch, wenn Sie für keinen Radio-Button verwenden möchten.

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

dann

setButtonGroup(randomIndex, yourButtonGroup.getElements());