如何从ButtonGroup中选择哪个JRadioButton

Joe*_*oel 71 java swing

我有一个包含表单上的单选按钮的swing应用程序.ButtonGroup但是,我看到了可用的方法,我似乎无法获得所选的名称JRadioButton.这是我到目前为止所能说的:

  • 从ButtonGroup,我可以执行一个getSelection()返回ButtonModel.从那里,我可以执行一个getActionCommand,但似乎并不总是有效.我尝试了不同的测试并获得了不可预测的结果.

  • 另外ButtonGroup,我可以从中获得枚举getElements().但是,然后我必须遍历每个按钮只是为了检查它是否是所选择的按钮.

有没有更简单的方法来找出选择了哪个按钮?我正在Java 1.3.1和Swing中编程.

Ren*_*hya 72

我遇到了类似的问题并解决了这个问题:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

它返回所选按钮的文本.

  • 很好的解决方案,获取所选按钮的文本 - 但是应该知道重命名按钮时输出会发生变化(例如翻译时).不鼓励将任何功能绑定到GUI中显示的文本. (4认同)

Dra*_*mon 40

我会循环通过你的JRadioButtons电话isSelected().如果你真的想离开,ButtonGroup你只能去模特.您可以将模型与按钮匹配,但如果您可以访问按钮,为什么不直接使用它们?

  • @Thufir:ButtonGroup告诉Java只应该选择组的JRadioButtons.没有它,所有这些都可以同时选择. (5认同)
  • 什么可能是按钮组的重点呢? (3认同)

小智 27

你必须添加setActionCommandJRadioButton那时只是做:

String entree = entreeGroup.getSelection().getActionCommand();
Run Code Online (Sandbox Code Playgroud)

例:

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


Tom*_*ine 5

我建议直接采用 Swing 中的模型方法。将组件放入面板和布局管理器后,甚至不必费心保留对它的特定引用。

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


Ale*_*jas 5

您可以将actionAction和放到每个单选按钮(字符串)中。

this.jButton1.setActionCommand("dog");
this.jButton2.setActionCommand("cat");
this.jButton3.setActionCommand("bird");
Run Code Online (Sandbox Code Playgroud)

假设它们已经在ButtonGroup(在本例中为state_group)中,则可以像下面这样获得所选的单选按钮:

String selection = this.state_group.getSelection().getActionCommand();
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助