java - 如何抓取 "shift+anykey"的NativeEvent.getKeyCode

标签 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+ASHIFT+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();
    }
}

关于java - 如何抓取 "shift+anykey"的NativeEvent.getKeyCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17895337/

相关文章:

java - "Error: Could not find or load main class"JavaFX 终端

javascript - 传递给子组件的事件处理程序(prop)无法调用react native

android - 如何捕捉 android 的 onsize 事件(或等于)

javascript - 谷歌标签管理器 : Tracking "Select" Drop Down Menu "Option" tag value

java - 如何使用 URL 从数据库中打印表中的多条记录

java - 使用 jQuery Post 上传文件到 Play Controller

java - 如何制作像 xmlbeans XmlObject.copy() 这样的 JAXB 对象的深层复制?

gwt - 如何使用 gwt 历史记录查找浏览器后退按钮点击

java - GWT 网络应用程序 : How to maintian logged in state?

java - 如何查看 Umbrella 异常的完整堆栈跟踪(或根本原因)?