---
category: swing
folder: ToggleButtonGroup
title: ButtonGroup中にある選択状態のJToggleButtonをクリックして選択解除可能にする
tags: [ButtonGroup, JToggleButton]
author: aterai
pubdate: 2016-06-06T00:23:27+09:00
description: ButtonGroup中にある選択状態のJToggleButtonをもう一度クリックすることで、その選択を解除できるように設定します。
image: https://lh3.googleusercontent.com/-xZ1YFhJedcg/V1Q_LKyzhzI/AAAAAAAAOao/S-uPsKtdlg8k1eWf2yCIGnh4Hw2r7bGNACCo/s800/ToggleButtonGroup.png
hreflang:
    href: https://java-swing-tips.blogspot.com/2017/02/click-on-already-selected-jtogglebutton.html
    lang: en
---
* 概要 [#summary]
`ButtonGroup`中にある選択状態の`JToggleButton`をもう一度クリックすることで、その選択を解除できるように設定します。

#download(https://lh3.googleusercontent.com/-xZ1YFhJedcg/V1Q_LKyzhzI/AAAAAAAAOao/S-uPsKtdlg8k1eWf2yCIGnh4Hw2r7bGNACCo/s800/ToggleButtonGroup.png)

* サンプルコード [#sourcecode]
#code(link){{
class ToggleButtonGroup extends ButtonGroup {
  private ButtonModel prevModel;
  private boolean isAdjusting;
  @Override public void setSelected(ButtonModel m, boolean b) {
    if (isAdjusting) {
      return;
    }
    if (m.equals(prevModel)) {
      isAdjusting = true;
      clearSelection();
      isAdjusting = false;
    } else {
      super.setSelected(m, b);
    }
    prevModel = getSelection();
  }
}
}}

* 解説 [#explanation]
- `Default ButtonGroup`
-- `ButtonGroup`に追加された`JToggleButton`などは、すでに選択状態にあるボタンをクリックして選択解除することはできない
- `Custom ButtonGroup(clears the selection)`
-- `ButtonGroup#setSelected(...)`メソッドをオーバーライドし、選択状態にあるボタンをクリックした場合は、`ButtonGroup#clearSelection()`メソッドを呼び出してグループ内のすべてのボタンが選択されていない状態に戻す
-- `ButtonGroup#setSelected(...)`メソッドをオーバーライドし、選択状態にあるボタンをクリックした場合は、`ButtonGroup#clearSelection()`メソッドを呼び出してグループ内のすべてのボタンを未選択状態に戻す

* 参考リンク [#reference]
- [https://stackoverflow.com/questions/37598206/how-to-deselect-already-selected-jradiobutton-by-clicking-on-it/37607560#37607560 java - How to deselect already selected JRadioButton by clicking on it - Stack Overflow]
- [[ButtonGroup内のJRadioButtonなどの選択をクリア>Swing/ClearGroupSelection]]

* コメント [#comment]
#comment
#comment