TITLE:JTableでキー入力によるセル編集自動開始を一部禁止する

Usage: #tags(tags)
Posted by at 2011-03-07

JTableでキー入力によるセル編集自動開始を一部禁止する

JTableのセル編集自動開始をファンクションキーの場合だけ無効にします。Swing - JTable starts editing when F3 is pressed - howto disable?を参考にしています。

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

サンプルコード

JTable table = new JTable(model) {
  //Swing - JTable starts editing when F3 is pressed - howto disable?
  //http://forums.oracle.com/forums/thread.jspa?threadID=1348192
  @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 Keyも含む)を押しても、セルの編集が開始されないようにJTable#editCellAt(...)メソッドをオーバラーライドしています。


上記のサンプルには、InputMap、ActionMapにF3キーでbeepが鳴るようにキーストロークとアクションを追加しています。このキーストロークはJTable#editCellAtメソッドでのキー入力チェックとは別に実行されるので、デフォルトのF2キーでのstartEditing、F8キーでのfocusHeaderは、JTable#editCellAt(...)の戻り値とは関係なく有効になっています。

  • JTable#processKeyBinding(...)をオーバーライドしてキー入力自体を弾くと、InputMapに追加したキーストロークも除かれるので、これらのアクションも実行されない

参考リンク

コメント