---
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