Изменить запись таблицы по ключевому событию - PullRequest
0 голосов
/ 26 ноября 2010

У меня есть JTable, который автоматически начинает редактирование при нажатии клавиши. Уже введенный текст также будет удален, так что, если вы начнете печатать, только ваше печатание получит текущее значение. Это работает, но моя проблема в том, что каждый ключ запускает это редактирование, как capslock, numlock, esc и все в таком духе. Как я могу исключить все виды управляющих клавиш из этого редактирования, не исключая одну за другой?

Вот код, который у меня уже есть. Он находится в методе isCellEditable в TableCellEditor, связанном с таблицей.

// 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;

}

Ответы [ 2 ]

1 голос
/ 26 ноября 2010

Возможно, вместо проверки на ложные события, вы должны проверить на положительные:

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;
}

Возможно, вам придется расширить последний список , если , специальными символами, такими как _, *, # и т. Д.

0 голосов
/ 26 ноября 2010

Вы можете использовать Обертку персонажа, чтобы легко определить, какая клавиша была нажата. Такие методы, как isLetterOrDigit (int codepoint), вероятно, будут полезны.

...