Swing/RadioButtonCellEditor のバックアップ(No.10)
- バックアップ一覧
 - 差分 を表示
 - 現在との差分 を表示
 - 現在との差分 - Visual を表示
 - ソース を表示
 - Swing/RadioButtonCellEditor へ行く。
  
- 1 (2012-06-25 (月) 02:54:48)
 - 2 (2012-12-22 (土) 15:56:54)
 - 3 (2013-05-26 (日) 05:58:22)
 - 4 (2013-08-16 (金) 16:33:13)
 - 5 (2015-01-09 (金) 14:10:58)
 - 6 (2016-04-22 (金) 16:03:14)
 - 7 (2016-05-27 (金) 13:20:05)
 - 8 (2017-03-08 (水) 13:05:11)
 - 9 (2018-01-12 (金) 14:28:16)
 - 10 (2018-10-23 (火) 18:19:18)
 - 11 (2020-10-25 (日) 00:41:29)
 - 12 (2022-08-19 (金) 12:20:07)
 - 13 (2025-01-03 (金) 08:57:02)
 - 14 (2025-01-03 (金) 09:01:23)
 - 15 (2025-01-03 (金) 09:02:38)
 - 16 (2025-01-03 (金) 09:03:21)
 - 17 (2025-01-03 (金) 09:04:02)
 - 18 (2025-06-19 (木) 12:41:37)
 - 19 (2025-06-19 (木) 12:43:47)
 
 
- category: swing
folder: RadioButtonCellEditor
title: JTableのセルにJRadioButton
tags: [JTable, JRadioButton, TableCellRenderer, TableCellEditor]
author: aterai
pubdate: 2011-04-25T17:34:01+09:00
description: JTableのセルにJRadioButtonを配置し、全体で一つだけ選択できるように設定します。
image: 

 
概要
JTableのセルにJRadioButtonを配置し、全体で一つだけ選択できるように設定します。
Screenshot

Advertisement
サンプルコード
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);
    }
  }
};
View in GitHub: Java, Kotlin解説
上記のサンプルでは、2列目のカラムクラスをBooleanに設定し、JRadioButtonを継承するセルレンダラー、セルエディタを使ってBoolean値の表示と編集を行っています。
- セルレンダラーとセルエディタの
JRadioButtonは、行数分ではなく描画用にそれぞれ一つだけ作成して使用 ButtonGroupを使用して、表中のJRadioButtonを一つだけ選択状態に制限することは出来ない- 代わりに、ある
2列目セルの値をTRUEにすると、ほかの行の2列目セルの値がすべてFALSEになるよう、TableModel#setValueAt(...)メソッドをオーバーライド 
参考リンク
- JTableのセル中にJRadioButtonを配置
- 一つのセルの中に複数の
JRadioButtonを配置(ButtonGroupを使用して、セル中で一つだけ選択可能) 
 - 一つのセルの中に複数の