Swing/CellEditor のバックアップの現在との差分(No.3)
#navi(contents-page-name): No such page: ST
2021-11-03 (水) 02:26:04
概要
JTable
のすべてのセルを編集不可にする方法をテストします。
Screenshot
Advertisement
サンプルコード
model = new TestModel(){ public boolean isCellEditable(int row, int column){ return false; } }; jtable = new JTable(model);
解説
上記のサンプルは以下の3
種類の設定でセルを編集不可にする方法をテストしています。
-
Override TableModel#isCellEditable(...) { return false; }
- テーブルモデルの
TableModel#isCellEditable()
メソッドが常にfalse
を返すようにオーバーライドしてすべてのセルを編集不可に設定 -
JTable#isCellEditable()
メソッドをオーバーライドする方法もある- たとえば同じ
TableModel
を使用する2
つのJTable
で片方だけ編集不可にする設定が可能
- たとえば同じ
- テーブルモデルの
-
JTable#setDefaultEditor(Object.class, null);
- 各カラムにセルエディタを設定しない、かつ
Object.class
が使用するデフォルトセルエディタをnull
にすることですべてのセルを編集不可にする#spanend #spanadd table.setDefaultEditor(Object.class, null); #spanend #spanadd
- 各カラムにセルエディタを設定しない、かつ
-
JTable#setEnabled(false)
-
JTable#setEnabled(false)
でセルや行の選択なども含めてすべてのセルでの編集を禁止する#spanend #spanadd table.setEnabled(false); #spanend #spanadd
-
参考リンク
jtable.setDefaultEditor(Object.class, null);
コメント
- セルや行の選択をしないのであれば、
JTable#setFocusable(false)
とJTable#setCellSelectionEnabled(false)
を合わせて利用することでも編集不可にできるようです。こちらは編集不可というより、文字通りフォーカスしないといった感じですが。 -- shuna- なるほど。F2も含めてキー入力で編集開始できなくなる(マウスクリックでは可能?)ようですね。
table.putClientProperty("JTable.autoStartsEdit", Boolean.FALSE);
よりすこし強力といった所でしょうか。いつか、こちらからJTableでキー入力によるセル編集開始を禁止するに移動するかも。 -- aterai
- なるほど。F2も含めてキー入力で編集開始できなくなる(マウスクリックでは可能?)ようですね。
jtable.setEnabled(false);