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