• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JTableのセルにJRadioButton
#navi(../)
#tags(JTable, JRadioButton, TableCellRenderer, TableCellEditor)
RIGHT:Posted by &author(aterai); at 2011-04-25
*JTableのセルにJRadioButton [#o78918d7]
``JTable``のセルに``JRadioButton``を配置し、全体で一つだけ選択できるように設定します。
---
title: JTableのセルにJRadioButton
tags: [JTable, JRadioButton, TableCellRenderer, TableCellEditor]
author: aterai
pubdate: 2011-04-25T17:34:01+09:00
description: JTableのセルにJRadioButtonを配置し、全体で一つだけ選択できるように設定します。
---
* 概要 [#o78918d7]
`JTable`のセルに`JRadioButton`を配置し、全体で一つだけ選択できるように設定します。

-&jnlp;
-&jar;
-&zip;
#download(https://lh5.googleusercontent.com/_9Z4BYR88imo/TbUwB1XoMEI/AAAAAAAAA6M/5VwHykCV4OI/s800/RadioButtonCellEditor.png)

//#screenshot
#ref(https://lh5.googleusercontent.com/_9Z4BYR88imo/TbUwB1XoMEI/AAAAAAAAA6M/5VwHykCV4OI/s800/RadioButtonCellEditor.png)

**サンプルコード [#d4849766]
* サンプルコード [#d4849766]
#code(link){{
DefaultTableModel model = new DefaultTableModel(data, columnNames) {
  @Override public Class<?> getColumnClass(int column) {
    return getValueAt(0, column).getClass();
  }
  @Override public void setValueAt(Object v, int row, int column) {
    if(v instanceof Boolean) {
      for(int i=0; i<getRowCount(); i++) {
        super.setValueAt(i==row, i, column);
      }
    }else{
      super.setValueAt(v, row, column);
    }
  }
};
}}

**解説 [#g90ccab3]
上記のサンプルでは、2列目のカラムクラスを``Boolean``に設定し、``JRadioButton``を継承するセルレンダラ、セルエディタを使って``Boolean``値の表示、編集を行っています。
* 解説 [#g90ccab3]
上記のサンプルでは、`2`列目のカラムクラスを`Boolean`に設定し、`JRadioButton`を継承するセルレンダラ、セルエディタを使って`Boolean`値の表示、編集を行っています。

``ButtonGroup``を使用することが出来ないので、1つの2列目セルの値を``TRUE``にすると、ほかの行の2列目セルの値がすべて``FALSE``になるよう、``TableModel#setValueAt(...)``メソッドをオーバーライドしています。
`ButtonGroup`を使用することが出来ないので、ある`2`列目セルの値を`TRUE`にすると、ほかの行の`2`列目セルの値がすべて`FALSE`になるよう、`TableModel#setValueAt(...)`メソッドをオーバーライドしています。

**参考リンク [#o1c7f4c6]
* 参考リンク [#o1c7f4c6]
- [[JTableのセル中にJRadioButtonを配置>Swing/RadioButtonsInTableCell]]
-- 一つのセルの中に複数の``JRadioButton``を配置(``ButtonGroup``を使用して、セル中で一つだけ選択可能)。
-- 一つのセルの中に複数の`JRadioButton`を配置(`ButtonGroup`を使用して、セル中で一つだけ選択可能)。

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