Как я могу получить, какой JRadioButton выбран из ButtonGroup
у меня есть приложение swing, которое включает в себя переключатели на форме. У меня есть ButtonGroup
, однако, глядя на доступные методы, я не могу получить имя выбранного JRadioButton
. Вот что я могу сказать до сих пор:
от ButtonGroup, я могу выполнить
getSelection()
вернутьButtonModel
. Оттуда, я могу выполнитьgetActionCommand
, но это не всегда работает. Я пробовал разные тесты и стал непредсказуемым результаты.и с
ButtonGroup
, Я могу получить перечисление отgetElements()
. Однако тогда мне пришлось бы перебирать каждую кнопку, чтобы проверить и посмотреть, выбран ли она.
есть ли более простой способ узнать, какая кнопка была выбрана? Я программирую это в Java 1.3.1 и Swing.
12 ответов:
Я бы просто петли через
JRadioButtons
и звонокisSelected()
. Если вы действительно хотите пойти отButtonGroup
вы можете добраться только до моделей. Вы можете сопоставить модели с кнопками, но тогда, если у вас есть доступ к кнопкам, почему бы не использовать их напрямую?
Я получил аналогичную проблему и решил с этим:
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; } }
возвращает текст выбранной кнопки.
вы должны добавить
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());
Я предлагаю идти прямо к модельному подходу в качели. После того, как вы поместили компонент в панель и менеджер компоновки, даже не потрудитесь сохранить конкретную ссылку на него.
Если вы действительно хотите виджет, то вы можете проверить каждого с
isSelected
илиMap<ButtonModel,JRadioButton>
.
вы можете поставить и actionCommand для каждого переключателя (строка).
this.jButton1.setActionCommand("dog"); this.jButton2.setActionCommand("cat"); this.jButton3.setActionCommand("bird");
предполагая, что они уже находятся в ButtonGroup (state_group в этом случае), вы можете получить выбранный переключатель следующим образом:
String selection = this.state_group.getSelection().getActionCommand();
надеюсь, что это помогает
следующий код показывает, который JRadiobutton выбирается из Buttongroup по щелчку кнопки.
Это делается путем циклического перебора всех кнопок JRadioButtons в определенной buttonGroup.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()); } } } }
можно использовать getSelectedObjects() из ItemSelectable (суперинтерфейс ButtonModel), которая возвращает список выбранных элементов. В случае группы переключателей это может быть только один или ни одного вообще.
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()
метод. Он расскажет вам о состоянии вашего радиобуттона. Используя его в сочетании с циклом (скажем, для цикла), вы можете найти, какой из них был выбран.
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();
... затем для каждой кнопки:
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()); }