2

これは私の他の質問の続きです。有効な文字または数字が押されているかどうかを確認しています

有効な文字- A から Z および az、これらの文字は「SHIFT+A=a」またはその逆の「SHIFT+a=A」を使用して入力できます。ユーザーが有効な文字以外を入力することを制限しています

無効な文字- 「SHIFT+1=!」「SHIFT+0=)」に

Heresはコードスニペットです。私が試しましたが、「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 コード = event.getKeyCode();

コードの値は常に 16 で、validShiftKeyPressedは常に false です。

SHIFT+AまたはSHIFT+1の値、またはその他の組み合わせが押されていることを確認したい。これが可能な方法はありますか?

4

1 に答える 1

1

これはあなたの正確な質問に対する正確な答えではありませんが、あなたが進んでいる道があなたが望むものをあなたに与えるかどうかはわかりません. 私が間違っている場合は、この回答を無視してください。

以下のコードのバリエーションを使用して、数値以外のユーザー入力を防ぎますが、ユーザーが移動してフィールドを編集できるようにします。このスニペットに「Character.isLetter(c)」を追加して、文字 (大文字または小文字) も使用できるようにしました。GWT エミュレーション クラスは、ASCII 文字のみを処理すると述べています。gwt-user.jar の「/gwt-user/com/google/gwt/emul/java/lang/Character」でエミュレートされたクラスを見つけて、javascript-land で何を行っているかを確認できます。

このタイプのコードを単独で使用すると、ユーザーに対する完全な入力制約と検証ソリューションが含まれないことに注意してください。たとえば、ユーザーがフィールドに好きなものを貼り付けることを妨げません。私は通常、フィールドの最終入力が有効であることを確認するために、保存する前にページの完全な検証を試みます。これを行うには、GWT Validation 機能 (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();
    }
}
于 2013-07-27T15:19:52.417 に答える