概要
JTable
のセル編集自動開始をファンクションキーの場合だけ無効にします。Swing - JTable starts editing when F3 is pressed - howto disable?を参考にしています。
Screenshot
Advertisement
サンプルコード
JTable table = new JTable(model) {
// Swing - JTable starts editing when F3 is pressed - howto disable?
// https://community.oracle.com/thread/1350192
@Override public boolean editCellAt(int row, int column, EventObject e) {
if (e instanceof KeyEvent) {
int c = ((KeyEvent) e).getKeyCode();
if (KeyEvent.VK_F1 <= c && c <= KeyEvent.VK_F21) {
return false;
}
}
return super.editCellAt(row, column, e);
}
}
View in GitHub: Java, Kotlin解説
ignore: F1,F4-F7,F9-
- チェックボックスをチェックしている場合、ファンクションキー(ShiftやCtrl+Functionキーも含む)を押してもセルの編集が開始されないように
JTable#editCellAt(...)
メソッドをオーバーライド
- チェックボックスをチェックしている場合、ファンクションキー(ShiftやCtrl+Functionキーも含む)を押してもセルの編集が開始されないように
table.putClientProperty("JTable.autoStartsEdit", Boolean.FALSE);
- F2は除くキー入力でのセルの編集開始を禁止
- JTableでキー入力によるセル編集開始を禁止する
- 上記のサンプルでは
InputMap
、ActionMap
にF3キーでbeep
が鳴るようにキーストロークとアクションを追加- このキーストロークは
JTable#editCellAt
メソッドでのキー入力チェックとは別に実行されるので、デフォルトのF2キーでのstartEditing
、F8キーでのfocusHeader
はJTable#editCellAt(...)
の戻り値とは関係なく有効になる
- このキーストロークは
JTable#processKeyBinding(...)
をオーバーライドしてキー入力自体を無視するとInputMap
に追加したキーストロークも除外されるため、これらのアクションも実行されない