概要

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

サンプルコード

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を使用してもJTableの列内に配置されたJRadioButtonの一つだけを選択状態にする制限は適用不可
  • 代わりに2列目の指定したセルの値をtrueにすると残りの行の2列目セルの値がすべてfalseになるようTableModel#setValueAt(...)メソッドをオーバーライド

参考リンク

コメント