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

发布于 2024-10-16 12:15:43 字数 91 浏览 3 评论 0原文

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

That's it. I need to create a ButtonGroup that allows to select a option or, if the user click on the selected option, deselect the item (nothing will be selected) and, of course, capture the event to do something.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

萤火眠眠 2024-10-23 12:15:43

以防万一杰夫的链接将来被破坏,描述如下:
您需要将 ButtonGroup 子类化以允许不选择,并将按钮添加到此按钮组中。

public class NoneSelectedButtonGroup extends ButtonGroup {

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

Just in case Jeff's link is broken in the future, here's what's described:
you need to subclass ButtonGroup to allow a no-selection, and add your buttons to this buttongroup.

public class NoneSelectedButtonGroup extends ButtonGroup {

  @Override
  public void setSelected(ButtonModel model, boolean selected) {
    if (selected) {
      super.setSelected(model, selected);
    } else {
      clearSelection();
    }
  }
}
烙印 2024-10-23 12:15:43

在未选中的按钮/复选框上执行 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();
    }
  }
}

I noticed weird behavior when doing button.setSelected(false) on a button/checkbox that is not selected. It deselected everything as if I deselected something.

I fixed it this way:

public class NoneSelectedButtonGroup extends ButtonGroup {

  @Override
  public void setSelected(ButtonModel model, boolean selected) {
    if (selected) {
      super.setSelected(model, selected);
    } else if (getSelection() != model) {
      clearSelection();
    }
  }
}
友谊不毕业 2024-10-23 12:15:43

捕捉事件来做某事。还要执行以下操作。

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

编辑:
但没有涉及 ButtonGroup。

Capture the event to do something. Also do the below.

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

EDIT:
But there is no ButtonGroup involved.

策马西风 2024-10-23 12:15:43

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);
    }
}

Solution for 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);
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文