如何从ButtonGroup中select哪个JRadioButton

我有一个包含表单上的单选button的swing应用程序。 我有ButtonGroup ,但是,看着可用的方法,我似乎无法得到所选的JRadioButton的名称。 以下是我可以告诉到目前为止:

  • 从ButtonGroup中,我可以执行getSelection()来返回ButtonModel 。 从那里,我可以执行getActionCommand ,但似乎并不总是工作。 我尝试了不同的testing,并得到不可预知的结果。

  • 同样从ButtonGroup ,我可以从getElements()获得一个枚举。 然而,那么我将不得不遍历每个button来检查,看看它是否是所选的一个。

有没有更容易的方法来找出哪个button已被选中? 我正在Java 1.3.1和Swing中编程。

我只是循环通过你的JRadioButtons并调用isSelected() 。 如果你真的想从ButtonGroup去,你只能去模型。 你可以将模型匹配到button,但是如果你有权访问button,为什么不直接使用它们呢?

我有类似的问题,并解决了这个问题:

 import java.util.Enumeration; import javax.swing.AbstractButton; import javax.swing.ButtonGroup; public class GroupButtonUtils { public String getSelectedButtonText(ButtonGroup buttonGroup) { for (Enumeration<AbstractButton> buttons = buttonGroup.getElements(); buttons.hasMoreElements();) { AbstractButton button = buttons.nextElement(); if (button.isSelected()) { return button.getText(); } } return null; } } 

它将返回所选button的文本。

您必须将setActionCommand添加到JRadioButton然后执行以下操作:

 String entree = entreeGroup.getSelection().getActionCommand(); 

例:

 java = new JRadioButton("Java"); java.setActionCommand("Java"); c = new JRadioButton("C/C++"); c.setActionCommand("c"); System.out.println("Selected Radio Button: " + buttonGroup.getSelection().getActionCommand()); 

我build议直接在Swing中使用模型方法。 将组件放在面板和布局pipe理器中之后,请勿保留特定的引用。

如果你真的想要这个小部件,那么你可以用isSelected来testing每一个,或者维护一个Map<ButtonModel,JRadioButton>

你可以把和actionCommand到每个单选button(string)。

 this.jButton1.setActionCommand("dog"); this.jButton2.setActionCommand("cat"); this.jButton3.setActionCommand("bird"); 

假设他们已经在一个ButtonGroup(在这种情况下state_group),你可以得到这个选定的单选button:

 String selection = this.state_group.getSelection().getActionCommand(); 

希望这可以帮助

下面的代码显示在按下button时从Buttongroup中select了哪个JRadiobutton
这是通过遍历特定buttonGroup中的所有JRadioButton来完成的。

  JRadioButton firstRadioButton=new JRadioButton("Female",true); JRadioButton secondRadioButton=new JRadioButton("Male"); //Create a radio button group using ButtonGroup ButtonGroup btngroup=new ButtonGroup(); btngroup.add(firstRadioButton); btngroup.add(secondRadioButton); //Create a button with text ( What i select ) JButton button=new JButton("What i select"); //Add action listener to created button button.addActionListener(this); //Get selected JRadioButton from ButtonGroup public void actionPerformed(ActionEvent event) { if(event.getSource()==button) { Enumeration<AbstractButton> allRadioButton=btngroup.getElements(); while(allRadioButton.hasMoreElements()) { JRadioButton temp=(JRadioButton)allRadioButton.nextElement(); if(temp.isSelected()) { JOptionPane.showMessageDialog(null,"You select : "+temp.getText()); } } } } 

您可以使用ItemSelectable的getSelectedObjects()(ButtonModel的超级接口),它返回所选项目的列表。 在单选button组的情况下,它只能是一个或根本没有。

将单选button添加到button组,然后:

buttonGroup.getSelection()。getActionCommand

 import javax.swing.Action; import javax.swing.ButtonGroup; import javax.swing.Icon; import javax.swing.JRadioButton; import javax.swing.JToggleButton; public class RadioButton extends JRadioButton { public class RadioButtonModel extends JToggleButton.ToggleButtonModel { public Object[] getSelectedObjects() { if ( isSelected() ) { return new Object[] { RadioButton.this }; } else { return new Object[0]; } } public RadioButton getButton() { return RadioButton.this; } } public RadioButton() { super(); setModel(new RadioButtonModel()); } public RadioButton(Action action) { super(action); setModel(new RadioButtonModel()); } public RadioButton(Icon icon) { super(icon); setModel(new RadioButtonModel()); } public RadioButton(String text) { super(text); setModel(new RadioButtonModel()); } public RadioButton(Icon icon, boolean selected) { super(icon, selected); setModel(new RadioButtonModel()); } public RadioButton(String text, boolean selected) { super(text, selected); setModel(new RadioButtonModel()); } public RadioButton(String text, Icon icon) { super(text, icon); setModel(new RadioButtonModel()); } public RadioButton(String text, Icon icon, boolean selected) { super(text, icon, selected); setModel(new RadioButtonModel()); } public static void main(String[] args) { RadioButton b1 = new RadioButton("A"); RadioButton b2 = new RadioButton("B"); ButtonGroup group = new ButtonGroup(); group.add(b1); group.add(b2); b2.setSelected(true); RadioButtonModel model = (RadioButtonModel)group.getSelection(); System.out.println(model.getButton().getText()); } } 

使用isSelected()方法。 它会告诉你你的radioButton的状态。 使用它与一个循环(比如for循环),你可以find哪一个被选中。

 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MyJRadioButton extends JFrame implements ActionListener { JRadioButton rb1,rb2; //components ButtonGroup bg; MyJRadioButton() { setLayout(new FlowLayout()); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); rb1=new JRadioButton("male"); rb2=new JRadioButton("female"); //add radio button to button group bg=new ButtonGroup(); bg.add(rb1); bg.add(rb2); //add radio buttons to frame,not button group add(rb1); add(rb2); //add action listener to JRadioButton, not ButtonGroup rb1.addActionListener(this); rb2.addActionListener(this); pack(); setVisible(true); } public static void main(String[] args) { new MyJRadioButton(); //calling constructor } @Override public void actionPerformed(ActionEvent e) { System.out.println(((JRadioButton) e.getSource()).getActionCommand()); } 

}

 jRadioOne = new javax.swing.JRadioButton(); jRadioTwo = new javax.swing.JRadioButton(); jRadioThree = new javax.swing.JRadioButton(); 

…然后为每个button:

 buttonGroup1.add(jRadioOne); jRadioOne.setText("One"); jRadioOne.setActionCommand(ONE); jRadioOne.addActionListener(radioButtonActionListener); 

…听众

 ActionListener radioButtonActionListener = new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { radioButtonActionPerformed(evt); } }; 

…做任何你需要的事件作为回应

 protected void radioButtonActionPerformed(ActionEvent evt) { System.out.println(evt.getActionCommand()); }