【问题标题】:How to create ButtonGroup of JToggleButton's that allows to deselect the actual option?如何创建允许取消选择实际选项的 JToggleButton 按钮组?
【发布时间】:2011-02-04 23:56:50
【问题描述】:

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

【问题讨论】:

  • 这对用户来说可能不直观。您是否考虑过使用一个选项来表示与取消选择相对应的状态/选择?

标签: java swing buttongroup


【解决方案1】:

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

public class NoneSelectedButtonGroup extends ButtonGroup {

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

【讨论】:

  • 或者匿名内部类就足够了,例如,ButtonGroup myGroup = new ButtonGroup(){ /*code from above*/ };
  • @MarkJeronimus answer 对此进行了优化,以避免在未选中的按钮/复选框上清除选择调用 button.setSelected(false)
【解决方案2】:

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-01
          • 1970-01-01
          • 2018-08-01
          相关资源
          最近更新 更多