TITLE:JTableのセルを編集不可にする
#navi(../)
RIGHT:Posted by [[terai]] at 2004-06-14
*JTableのセルを編集不可にする [#g3871d47]
JTableのセルを編集不可にします。

-&jnlp;
-&jar;
-&zip;

#screenshot

**サンプルコード [#x41114f8]
#code{{
JTable table = new JTable(new DefaultTableModel() {
  @Override
  public boolean isCellEditable(int row, int column) {
    return false;
  }
});
}}

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

- ''isCellEditable return false''
-- テーブルモデルのTableModel#isCellEditable()メソッドが常にfalseを返すようにオーバーライドして、すべてのセルを編集不可にしています。

- ''setDefaultEditor(Object.class, null)''
-- 各カラムにセルエディタを設定しない、かつObject.classが使用するデフォルトセルエディタをnullにした場合も、すべてのセルを編集不可にすることができます。
#code{{
table.setDefaultEditor(Object.class, null);
}}

- ''setEnabled(false)''
-- JTable#setEnabled(false)してしまえば、すべてのセルでの編集を禁止することができますが、セルや行の選択なども不可能になってしまいます。
#code{{
table.setEnabled(false);
}}

**参考リンク [#h3c8692e]
-[[JTableでキー入力によるセル編集開始を禁止する>Swing/PreventStartCellEditing]]

**コメント [#s3a072c4]
- セルや行の選択をしないのであれば、JTable#setFocusable(false)とJTable#setCellSelectionEnabled(false)を合わせて利用することでも編集不可にできるようです。こちらは編集不可というより、文字通りフォーカスしないといった感じですが。 -- [[shuna]] &new{2009-10-23 (Fri) 03:12:58};
-- なるほど。F2も含めてキー入力で編集開始できなくなる(マウスクリックでは可能?)ようですね。table.putClientProperty("JTable.autoStartsEdit", Boolean.FALSE);よりすこし強力といった所でしょうか。いつか、こちらから[[JTableでキー入力によるセル編集開始を禁止する>Swing/PreventStartCellEditing]]に移動するかも。 -- [[terai]] &new{2009-10-23 (金) 22:07:44};

#comment