Swing/FunctionKeyStartEditing のバックアップの現在との差分(No.2)
TITLE:JTableでキー入力によるセル編集自動開始を一部禁止する
Posted by aterai at 2011-03-07
JTableでキー入力によるセル編集自動開始を一部禁止する
JTableのセル編集自動開始をファンクションキーの場合だけ無効にします。Swing - JTable starts editing when F3 is pressed - howto disable?を参考にしています。- category: swing folder: FunctionKeyStartEditing title: JTableでキー入力によるセル編集自動開始を一部禁止する tags: [JTable, ActionMap, InputMap] author: aterai pubdate: 2011-03-07T15:56:35+09:00 description: JTableのセル編集自動開始をファンクションキーの場合だけ無効にします。 image:
概要
JTable
のセル編集自動開始をファンクションキーの場合だけ無効にします。Swing - JTable starts editing when F3 is pressed - howto disable?を参考にしています。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
サンプルコード
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
JTable table = new JTable(model) {
//Swing - JTable starts editing when F3 is pressed - howto disable?
//http://forums.oracle.com/forums/thread.jspa?threadID=1348192
// 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) {
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);
}
}
解説
"ignore: F1,F4-F7,F9-"チェックボックスをチェックしている場合、ファンクションキー(Shift, Ctrl+Function Keyも含む)を押しても、セルの編集が開始されないようにJTable#editCellAt(...)メソッドをオーバラーライドしています。解説
-
ignore: F1,F4-F7,F9-
- チェックボックスをチェックしている場合、ファンクションキー(ShiftやCtrl+Functionキーも含む)を押してもセルの編集が開始されないように
JTable#editCellAt(...)
メソッドをオーバーライド
- チェックボックスをチェックしている場合、ファンクションキー(ShiftやCtrl+Functionキーも含む)を押してもセルの編集が開始されないように
-
table.putClientProperty("JTable.autoStartsEdit", Boolean.FALSE);
- F2は除くキー入力でのセルの編集開始を禁止
- JTableでキー入力によるセル編集開始を禁止する
- table.putClientProperty("JTable.autoStartsEdit", Boolean.FALSE);の場合、キー入力(F2は除く)によるセルの編集開始が禁止になる
上記のサンプルには、InputMap、ActionMapにF3キーでbeepがなるようにアクションを追加しています。このアクションはJTable#editCellAtメソッドでのチェックとは別に実行されるので、デフォルトのF2キーでのstartEditing、F8キーでのfocusHeaderは、JTable#editCellAt(...)の戻り値とは関係なく有効になっています。
- JTable#processKeyBinding(...)をオーバーライドしてキー入力自体を弾くと、InputMapに追加したキーストロークも除かれるので、これらのアクションも実行されない
- 上記のサンプルでは
InputMap
、ActionMap
にF3キーでbeep
が鳴るようにキーストロークとアクションを追加- このキーストロークは
JTable#editCellAt
メソッドでのキー入力チェックとは別に実行されるので、デフォルトのF2キーでのstartEditing
、F8キーでのfocusHeader
はJTable#editCellAt(...)
の戻り値とは関係なく有効になる
- このキーストロークは
-
JTable#processKeyBinding(...)
をオーバーライドしてキー入力自体を無視するとInputMap
に追加したキーストロークも除外されるため、これらのアクションも実行されない