2016-11-05 3 views
0

ich alle Zeichen eingegeben fangen, während das Dokument Fokus mit folgenden Code empfangen wird:Ereignis OnKeyDown falsche Codierung

RootPanel.get().addDomHandler(new KeyDownHandler() { 

      @Override 
      public void onKeyDown(KeyDownEvent event) { 
       char key = (char) event.getNativeKeyCode(); 
       String keyString = String.valueOf(key); 
       if (!event.isShiftKeyDown()) 
        keyString = keyString.toLowerCase(); 
       System.out.print(keyString); 

      } 
     }, KeyDownEvent.getType()); 

Wenn das Gerät, das Schlüsselereignisse sendet ASCII verwenden (wir nicht kontrollieren können, welche Codierung verwendet wird) dann erhalten wir die folgende Ausgabe:

www¾mitcom¾m3

Was können wir tun, damit wir das richtig codierte Eingabe in Java erhalten?

Antwort

2

event.getNativeKeyCode() gibt Ihnen einen Schlüsselcode, der kein Zeichen ist. Aus der Dokumentation: Ruft den Schlüsselcode (Code, der dem physischen Schlüssel zugeordnet ist) auf, der diesem Ereignis zugeordnet ist.. Punkt gedrückt auf meiner Tastatur gibt mir 190. Auch zu erwähnen in Java char ist 16-Bit-Typ, während int ist 32-Bit, d. H. Im Allgemeinen (char) integerVal ist eine unsichere Operation.

Nun, was Sie wahrscheinlich verwenden möchten, ist event.getNativeEvent().getCharCode(). Das Problem ist, dass es immer 0 in KeyDownEvent ist. Daher würde ich empfehlen, KeyPressHandler & KeyPressEvent zu verwenden. Ihr Code würde folgendermaßen aussehen:

private void onKeyPress(KeyPressEvent event) { 
    char c = (char) event.getNativeEvent().getCharCode(); 
    String s = String.valueOf(c); 
    if (event.isShiftKeyDown()) { 
    s = s.toUpperCase(); 
    } 

    GWT.log(s); 
} 

RootPanel.get().addDomHandler(this::onKeyPress, KeyPressEvent.getType()); 
+1

Dies ist eine sehr schöne Antwort. Vielen Dank. –

Verwandte Themen