如何捕获“shift + anykey”的NativeEvent.getKeyCode

时间:2013-07-27 07:22:36

标签: java gwt event-handling keycode gwt-2.2-celltable

这是我的其他question的继续。我正在检查是否按下了有效的字符或数字

有效字符 - A到Z和a-z,可以使用“SHIFT + A = a”输入这些字符,反之亦然“SHIFT + a = A”。我限制用户输入有效字符以外的其他字符

无效字符 - “SHIFT + 1 =!” “SHIFT + 0 =)”

下面是一段代码片段,我试过但不知道如何获得“SHIFT + ....”的keyCode

    @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 code = event.getKeyCode();

代码的值始终为16, validShiftKeyPressed 将始终为false。

我想检查 SHIFT + A SHIFT + 1 的值或按下任何其他组合。这有可能吗?

1 个答案:

答案 0 :(得分:1)

这不完全是您确切问题的答案,但我不确定您所处的路径是否能满足您的需求。如果我错了,那就干掉这个答案。

我使用以下代码的变体来防止非数字用户输入,但仍然允许用户四处移动并编辑该字段。我将“Character.isLetter(c)”添加到此代码段以允许字母(上部或下部)。 GWT仿真类声明它只处理ASCII字符。您可以在gwt-user.jar中的“/ gwt-user / com / google / gwt / emul / java / lang / Character”中找到模拟类,以查看它在javascript-land中的作用。

请注意,隔离的此类代码不包含用户的完整输入约束和验证解决方案。例如,它不会阻止用户将任何他们想要的内容粘贴到字段中。我通常会在保存之前尝试对页面进行完整验证,以确保我的字段的最终输入有效。我使用GWT验证功能(bean验证)来执行此操作。这可以捕获我无法阻止的任何输入中断。

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