如何从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()); }