Java 如何创建允许取消选择实际选项的JToggleButton的ButtonGroup?

Java 如何创建允许取消选择实际选项的JToggleButton的ButtonGroup?,java,swing,buttongroup,Java,Swing,Buttongroup,就这样。我需要创建一个按钮组,允许用户选择一个选项,或者,如果用户单击所选选项,取消选择该项目,则不会选择任何内容,当然,还需要捕获事件以执行某些操作。这正好说明了如何执行该操作,以防Jeff的链接在将来断开,下面介绍: 您需要子类化ButtonGroup以允许无选择,并将您的按钮添加到此ButtonGroup public class NoneSelectedButtonGroup extends ButtonGroup { @Override public void setSele

就这样。我需要创建一个按钮组,允许用户选择一个选项,或者,如果用户单击所选选项,取消选择该项目,则不会选择任何内容,当然,还需要捕获事件以执行某些操作。

这正好说明了如何执行该操作,以防Jeff的链接在将来断开,下面介绍: 您需要子类化ButtonGroup以允许无选择,并将您的按钮添加到此ButtonGroup

public class NoneSelectedButtonGroup extends ButtonGroup {

  @Override
  public void setSelected(ButtonModel model, boolean selected) {
    if (selected) {
      super.setSelected(model, selected);
    } else {
      clearSelection();
    }
  }
}

捕获事件以执行某些操作。也请执行以下操作

@Override
public void actionPerformed(ActionEvent e) {
    ((JToggleButton)e.getSource()).setSelected(false);
}
编辑:
但是不涉及按钮组。

针对java 1.6之前版本的解决方案

public class NoneSelectedButtonGroup extends ButtonGroup {
    private AbstractButton hack;

    public NoneSelectedButtonGroup() {
        super();
        hack = new JButton();
        add(hack);
    }

    @Override
    public void setSelected(ButtonModel model, boolean selected) {
        super.setSelected(selected ? model : hack.getModel(), true);
    }
}

在未选中的按钮/复选框上执行button.setSelectedfalse时,我注意到了奇怪的行为。它取消了所有的选择,就好像我取消了选择一样

我这样做:

公共类NoneSelectedButtonGroup扩展ButtonGroup{ @凌驾 public void setSelectedButtonModel模型,已选择布尔值{ 如果选择{ super.setSelectedmodel,选中; }否则,如果getSelection!=模型{ 选举; } } }
这对用户来说可能不是直观的。您是否考虑过制作一个选项来表示与取消选择相对应的状态/选择?或者一个匿名内部类就足够了,例如,ButtonGroup myGroup=new ButtonGroup{/*上面的代码*/}@MarkJeronimus对此进行了改进,以避免清除未选中的按钮/复选框上的选择调用按钮。setSelectedfalse。