TITLE:JTableのセルを編集不可にする

Posted by at 2004-06-14

JTableのセルを編集不可にする

`JTable`のセルを編集不可にします。

  • &jnlp;
  • &jar;
  • &zip;
CellEditor.png

サンプルコード

JTable table = new JTable(new DefaultTableModel() {
  @Override public boolean isCellEditable(int row, int column) {
    return false;
  }
});
View in GitHub: Java, Kotlin

解説

上記のサンプルは、以下の三種類の方法で、セルを編集不可にすることが出来ます。

  • `Override TableModel#isCellEditable(...) { return false; }`
    • テーブルモデルの`TableModel#isCellEditable()メソッドが常にfalse`を返すようにオーバーライドして、すべてのセルを編集不可にしています。
  • `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