哪些SWING元素可以添加到ButtonGroup中有意义?

时间:2012-05-25 06:53:00

标签: java swing buttongroup

虽然每个AbstractButton都可以添加到ButtonGroup(根据Java API),但我想问一下,添加哪些元素真的很有意义。

以下两个肯定会这样做:

  • JRadioButton
  • JRadioButtonMenuItem

我想知道:

  • JCheckBox< - 与JRadioButton一样,继承自JToggleButton
  • 任何其他AbstractButton

2 个答案:

答案 0 :(得分:3)

ButtonGroup用于为一组按钮创建多重排除范围。创建一组具有相同ButtonGroup对象的按钮意味着打开其中一个按钮将关闭该组中的所有其他按钮。

ButtonGroup可以与从AbstractButton继承的任何对象集一起使用。通常,ButtonGroup包含JRadioButton,JRadioButtonMenuItem或JToggleButton的实例。将JButtonJMenuItem的实例放在ButtonGroup中是没有意义的,因为JButtonJMenuItem未实现所选状态。< / p>

最初,组中的所有按钮都是未选中的。选择任何按钮后,组中始终会选择一个按钮。无法以编程方式将按钮设置为“关闭”,以清除按钮组。要显示“未选中”的外观,请向该组添加一个不可见的JRadioButton,然后以编程方式选择该按钮以关闭所有显示的JRadioButtons。例如,可以连接标签为“none”的普通按钮来选择不可见的JRadioButton

有关使用ButtonGroups see How to Use JRadioButtons的示例和更多信息,请参阅The Java Tutorial中的一节。

答案 1 :(得分:2)

除了上面的答案之外 - 还有一种方法,创建ButtonGroup,允许清除组中的选择(没有选择任何组按钮时的状态),而不需要任何其他代码 - 只需扩展ButtonGroup并覆盖setSelected像这样的方法:

public void setSelected ( ButtonModel model, boolean selected )
{
    if ( selected || !unselectable )
    {
        super.setSelected ( model, selected );
    }
    else
    {
        clearSelection ();
    }
}

这将允许按钮被取消选择。