0

キーを押すと自動的に編集を開始するJTableがあります。すでに入力されているテキストも削除されるため、入力を開始すると、入力のみが現在の値になります。それは機能しますが、私の問題は、capslock、numlock、escなどのすべてのキーがその編集を開始することです。1つずつ除外せずに、すべての種類のコントロールキーを編集から除外するにはどうすればよいですか?

これが私がすでに持っているコードです。これは、テーブルに関連するTableCellEditorのメソッドisCellEditableにあります。

// It's a keyevent, so check if it's a key that should start editing
if (anEvent instanceof KeyEvent) {

// Get the events key
int keyCode = ((KeyEvent) anEvent).getKeyCode();
char keyChar = ((KeyEvent) anEvent).getKeyChar();

// Convert character to lower case by first creating a string out of it
keyChar = ("" + keyChar).toLowerCase().charAt(0);

// F2 allowed
if (keyCode == KeyEvent.VK_F2) {
    return true;
}

// Keycode is unknown so check if we can at least find the keyChar
if (keyCode == 0 && (keyChar == 'ä' || keyChar == 'ö' || keyChar == 'ü')) {
    resetText = true;
    return true;
}

// Control characters disallowed
if (keyCode < 32 || keyCode == KeyEvent.VK_WINDOWS
        || keyCode == KeyEvent.VK_CONTEXT_MENU || keyCode == KeyEvent.VK_SCROLL_LOCK
        || keyCode == KeyEvent.VK_NUM_LOCK || keyCode == KeyEvent.VK_META
        || (keyCode >= KeyEvent.VK_F1 && keyCode <= KeyEvent.VK_F12))
    return false;

// all other keys are allowed
resetText = true;
return true;

}

4

2 に答える 2

1

たぶん、誤ったイベントをチェックする代わりに、ポジティブなイベントをチェックする必要があります。

if (anEvent instanceof KeyEvent) {
   // Get the events key
   int keyCode = ((KeyEvent) anEvent).getKeyCode();
   char keyChar = ((KeyEvent) anEvent).getKeyChar();
   resetText = false;
   // F2 allowed
   if (keyCode == KeyEvent.VK_F2) {
      return true;
   }
   // letters, digits and space allowed
   if (Character.isSpaceChar(keyChar) || Character.isLetterOrDigit(keyChar)) {
      resetText = true;
      return true;
   }
   return false;
}

_、*、#などの特殊文字を使用して、最後のifリストを拡張する必要がある場合があります。

于 2010-11-26T10:36:05.937 に答える
0

文字ラッパーを使用すると、押されたキーの種類を簡単に判別できます。isLetterOrDigit(int codepoint)のようなメソッドがおそらく役立つでしょう。

于 2010-11-26T10:45:40.703 に答える