2013-07-27 5 views
2

Это продолжение моего другого question. Я проверяю, если действительный символ или номер нажатКак захватить NativeEvent.getKeyCode «shift + anykey»

Допустимые символы - A до Z и аз, эти символы можно вводить с помощью «Shift + A = а» и наоборот «Shift + A = A ». Я запрещаю пользователю вводить иные действительные символы

Недействительные символы - "SHIFT + 1 =!" на "SHIFT + 0 =)"

Heres фрагмент кода, который я попробовал, но не уверен, как получить KEYCODE из "SHIFT + ...."

@Override 
    public void onBrowserEvent(Context context, Element parent, String value, 
       NativeEvent event, ValueUpdater<String> vUpdater){ 

    if (event.getShiftKey()) { 
       int code = event.getKeyCode(); 
    //only a-z and A-Z are allowed if shift key is pressed 
    if ((code >= 65 && code <= 90) || (code >= 97 && code <= 122)) { 
     validShiftKeyPressed = true; 
    } else { 
     validShiftKeyPressed = false; 
    }  
    } 

    if (validShiftKeyPressed && 
       (event.getKeyCode()>=48 && event.getKeyCode()<=57)){ 
     \\do some operation 
     } 

Int код = event.getKeyCode();

Значение кода всегда будет 16 и validShiftKeyPressed всегда будет ложным.

Я хочу, чтобы проверить значение SHIFT + A или SHIFT + 1 или любая другая комбинация нажатия. Есть ли способ, которым это возможно?

ответ

1

Это не совсем ответ на ваш точный вопрос, но я не уверен, что путь, на котором вы находитесь, даст вам то, что вы хотите. Если я ошибаюсь, просто игнорируйте этот ответ.

Я использую вариант кода ниже, чтобы предотвратить ввод нечислового пользователя, но по-прежнему позволяет пользователю перемещаться и редактировать поле. Я добавил «Character.isLetter (c)» к этому фрагменту, чтобы также разрешить буквы (верхние или нижние). Класс эмуляции GWT утверждает, что он обрабатывает только символы ASCII. Эмулированный класс можно найти в «/ gwt-user/com/google/gwt/emul/java/lang/Character» в gwt-user.jar, чтобы посмотреть, что он делает на javascript-land.

Помните, что этот тип кода в изоляции не включает полное ограничение ввода и решение для проверки ваших пользователей. Например, это не мешает пользователю вставлять все, что захочет, в поле. Обычно я пытаюсь выполнить полную проверку страницы до сохранения, чтобы убедиться, что окончательный ввод моих полей действителен. Для этого я использую функцию проверки подлинности GWT (проверка боба). Это улавливает любые сбои в работе, которые я не смог предотвратить от такого кода.

protected void handleKeyPress(KeyPressEvent event) { 

    // get the char code 
    char charCode = event.getCharCode(); 
    if (charCode == '\u0000') { 
     /* 
     * On some browsers the charcode does not exist in the keypress 
     * event. In this case we switch over to the keycode. 
     */ 
     charCode = (char)event.getNativeEvent().getKeyCode(); 
    } 

    // prevent input other than [a-z|A-Z|0-9] but still allow basic navigation and editing keys 
    if ((!Character.isDigit(charCode)) && (!Character.isLetter(charCode)) && 
      (charCode != (char)KeyCodes.KEY_TAB) && 
      (charCode != (char)KeyCodes.KEY_BACKSPACE) && 
      (charCode != (char)KeyCodes.KEY_ENTER) && 
      (charCode != (char)KeyCodes.KEY_HOME) && 
      (charCode != (char)KeyCodes.KEY_END) && 
      (charCode != (char)KeyCodes.KEY_LEFT) && 
      (charCode != (char)KeyCodes.KEY_UP) && 
      (charCode != (char)KeyCodes.KEY_RIGHT) && 
      (charCode != (char)KeyCodes.KEY_DOWN)) { 
     event.preventDefault(); 
    } 
}