概要

JTableのすべてのセルを編集不可にする方法をテストします。

サンプルコード

JTable table = new JTable(new DefaultTableModel() {
  @Override public boolean isCellEditable(int row, int column) {
    return false;
  }
});
view all

解説

上記のサンプルは、以下の三種類の設定で、セルを編集不可にする方法をテストしています。

  • Override TableModel#isCellEditable(...) { return false; }
    • テーブルモデルのTableModel#isCellEditable()メソッドが常にfalseを返すようにオーバーライドして、すべてのセルを編集不可に設定
    • JTable#isCellEditable()メソッドをオーバーライドする方法もある
  • JTable#setDefaultEditor(Object.class, null);
    • 各カラムにセルエディタを設定しない、かつObject.classが使用するデフォルトセルエディタをnullにすることで、すべてのセルを編集不可にする
      table.setDefaultEditor(Object.class, null);
      
  • JTable#setEnabled(false)
    • JTable#setEnabled(false)で、セルや行の選択なども含めて、すべてのセルでの編集を禁止する
      table.setEnabled(false);
      

参考リンク

コメント

  • セルや行の選択をしないのであれば、JTable#setFocusable(false)JTable#setCellSelectionEnabled(false)を合わせて利用することでも編集不可にできるようです。こちらは編集不可というより、文字通りフォーカスしないといった感じですが。 -- shuna
    • なるほど。F2も含めてキー入力で編集開始できなくなる(マウスクリックでは可能?)ようですね。table.putClientProperty("JTable.autoStartsEdit", Boolean.FALSE);よりすこし強力といった所でしょうか。いつか、こちらからJTableでキー入力によるセル編集開始を禁止するに移動するかも。 -- aterai