【问题标题】:How to select multiple JCheckBoxe into ButtonGroup?如何在 ButtonGroup 中选择多个 JCheckBoxe?
【发布时间】:2013-10-15 05:55:09
【问题描述】:

我有三个 JCheckBox,如下所示:

final JCheckBox c1 = new JCheckBox("A");
final JCheckBox c2 = new JCheckBox("B");
final JCheckBox c3 = new JCheckBox("C");

我为这个复选框按 ButtonGroup 分组,如下所示:

final ButtonGroup bg = new ButtonGroup();
bg.add(c1);
bg.add(c2);
bg.add(c3);

我有一个按钮可以将所选项目显示到如下标签中:

String SelectedItem=""; 
Enumeration<AbstractButton> items= bg.getElements();
while (items.hasMoreElements()) {
    AbstractButton btn = items.nextElement();
if(btn.isSelected())
{
        SelectedItem+=btn.getText()+",";
    }
 }
 lblA.setText(SelectedItem);

这工作正常,但我无法在运行时选择多个复选框。

【问题讨论】:

  • @kleopatra,你能帮帮我吗?
  • " 但我无法在运行时选择多个复选框"...它们在一个按钮组中...这就是重点...跨度>

标签: java swing multi-select jcheckbox buttongroup


【解决方案1】:

来自文档:

类按钮组

该类用于为一组 按钮。 使用相同的 ButtonGroup 对象创建一组按钮 表示“打开”其中一个按钮会关闭所有其他按钮 组中的按钮。

也就是说,您可能使用了错误的类来执行您需要的操作,如果您想对这些复选框进行分组,将它们放在面板中,那么您可以使用面板而不是每个属性来处理可见性、位置和所有其他属性复选框。

这里是文档的链接:Link

【讨论】:

    【解决方案2】:

    ButtonGroup 的用途是多排他选择。仅当您想要一个按钮集合时,不要创建ButtonGroup。不要使用ButtonGroup,而是使用ArrayList 之类的标准集合。

    List<JCheckBox> buttons = new ArrayList<>();
    buttons.add(c1);
    buttons.add(c2);
    buttons.add(c3);
    
    ...
    
    for ( JCheckbox checkbox : buttons ) {
        if( checkbox.isSelected() )
        {
            SelectedItem += btn.getText() + ",";
        }
    }
    

    进一步注意事项:在 Swing 事件线程 (invokelater) 中进行更新 (.setText),请记住,最好以这种串联方式创建 StringBuilder,但是对于这样的 UI 组件数量,性能影响可能不会很明显.

    【讨论】:

    • 我使用 ArrayList 按钮 = new ArrayList();我的问题解决了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    相关资源
    最近更新 更多