• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JTableでキー入力によるセル編集自動開始を一部禁止する
#navi(../)
RIGHT:Posted by [[aterai]] at 2011-03-07
#tags()
RIGHT:Posted by &author(aterai); at 2011-03-07
*JTableでキー入力によるセル編集自動開始を一部禁止する [#qbf519a7]
JTableのセル編集自動開始をファンクションキーの場合だけ無効にします。[http://forums.oracle.com/forums/thread.jspa?threadID=1348192 Swing - JTable starts editing when F3 is pressed - howto disable?]を参考にしています。

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

//#screenshot
#ref(https://lh6.googleusercontent.com/_9Z4BYR88imo/TXR_CO_Z9UI/AAAAAAAAA3I/7_3ml86ybo8/s800/FunctionKeyStartEditing.png)

**サンプルコード [#m8fe78b0]
#code{{
#code(link){{
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);
  }
}
}}

**解説 [#k3288490]
"ignore: F1,F4-F7,F9-"チェックボックスをチェックしている場合、ファンクションキー(Shift, Ctrl+Function Keyも含む)を押しても、セルの編集が開始されないようにJTable#editCellAt(...)メソッドをオーバラーライドしています。

- table.putClientProperty("JTable.autoStartsEdit", Boolean.FALSE);の場合、キー入力(F2は除く)によるセルの編集開始が禁止になる
-- [[JTableでキー入力によるセル編集開始を禁止する>Swing/PreventStartCellEditing]]

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

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

**参考リンク [#y35d6d2f]
-[http://forums.oracle.com/forums/thread.jspa?threadID=1348192 Swing - JTable starts editing when F3 is pressed - howto disable?]
-[[JTableでキー入力によるセル編集開始を禁止する>Swing/PreventStartCellEditing]]

**コメント [#s42d1634]
#comment