9

而已。我需要创建一个 ButtonGroup 以允许选择一个选项,或者,如果用户单击所选选项,则取消选择该项目(不会选择任何内容),当然,捕获事件以执行某些操作。

4

5 回答 5

12

以防万一 Jeff 的链接在将来被破坏,这里是描述的:你需要继承 ButtonGroup 以允许无选择,并将你的按钮添加到这个按钮组。

public class NoneSelectedButtonGroup extends ButtonGroup {

  @Override
  public void setSelected(ButtonModel model, boolean selected) {
    if (selected) {
      super.setSelected(model, selected);
    } else {
      clearSelection();
    }
  }
}
于 2013-05-24T09:34:41.640 回答
5

这准确地显示了如何做到这一点https://dzone.com/articles/unselect-all-toggle-buttons

于 2011-02-05T01:26:51.520 回答
1

button.setSelected(false)在未选中的按钮/复选框上执行操作时,我注意到奇怪的行为。它取消了所有的选择,就好像我取消了某些东西一样。

我这样修复它:

public class NoneSelectedButtonGroup extends ButtonGroup {

  @Override
  public void setSelected(ButtonModel model, boolean selected) {
    if (selected) {
      super.setSelected(model, selected);
    } else if (getSelection() != model) {
      clearSelection();
    }
  }
}
于 2014-03-06T14:35:18.990 回答
0

pre 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);
    }
}
于 2014-03-02T16:20:23.353 回答
0

捕获事件以做某事。还请执行以下操作。

@Override
public void actionPerformed(ActionEvent e) {
    ((JToggleButton)e.getSource()).setSelected(false);
}

编辑: 但是没有涉及到 ButtonGroup。

于 2013-06-02T03:20:31.533 回答