2016-06-03 17 views
1

Ich möchte erkennen, wenn bestimmte Tasten gedrückt werden. Ich kann kein KeyCode für das Prozentzeichen (%) finden. Ich habe den JavaFX 8 JavaDoc durchforstet, und es gibt keine Enum-Konstante für PERCENT, wie ich es erwarten würde. Google war auch nicht hilfreich. Gibt es etwas Besonderes an%, von dem ich nichts weiß?JavaFX KeyCode für Prozent (%)

@FXML 
private void keyPressed(KeyEvent evt) { 
    if (evt.getCode().isDigitKey() && !evt.isShiftDown()) { 
     String number = evt.getText(); 
     numberAction(number); 
    } 
    if (evt.getCode().equals(KeyCode.DECIMAL)) { 
     decimalAction(); 
    } 
    if (evt.getCode().equals(KeyCode.PERCENT)) { 
     percentAction(); 
    } 
} 

Die Enum KeyCode.PERCENT existiert nicht.

+0

Haben Sie einen Code zu teilen? Ich habe vor einer Weile ähnliche Probleme gesehen. Es würde helfen, wenn Sie uns mit etwas Code beginnen. – mohsenmadi

+0

@mohsenmadi nicht sicher, es hilft wirklich, aber ich habe einen Code zu meiner Frage hinzugefügt. Ich will nur einen 'KeyCode' für Prozent (Shift + 5) auf meiner Tastatur. Ich kann Shift + 5 mit 'KeyCombination' erkennen, aber ich möchte einen' KeyCode' für die zuletzt gedrückte Taste verwenden. – RonSiven

+0

Ich sehe eine gute Lösung unten durch @fabian, oder Sie können sogar getText() bei der Eingabe verwenden, um festzustellen, ob die gedrückte Taste% ist. Es stimmt zwar, dass es keine saubere Lösung gibt, um alle Schlüssel mit demselben Codierungsansatz zu behandeln. – mohsenmadi

Antwort

1

vielmehr das keyPressed Ereignis als, verwenden Sie das keyTyped Ereignis und verwenden KeyEvent.getCharacter das Ergebnis unabhängig von Tastaturlayout zu erhalten:

@FXML 
private void keyTyped(KeyEvent evt) { 
    ... 
    if ("%".equals(evt.getCharacter())) { 
     percentAction(); 
    } 
} 

(Sie müssen natürlich Ihre fxml-Datei ändern.)

+0

Danke @fabian. Das wird funktionieren. Ähnlich konnte ich damit umgehen. – RonSiven

-1

Haben Sie das versucht?

YOUR_CONTROLLER.setOnKeyPressed(event ->{ 
     if((event.getCode() == KeyCode.DIGIT5) && event.isShiftDown()) 
      System.out.println("It's work"); 

}); 

Und ja, u kann nicht KeyCode für dieses Symbol finden, weil es schreiben sollten Sie mehr als 1-Taste drücken (:

UPDATE: Sie können auch versuchen, dieses:

YOUR_CONTROLLER.setOnKeyPressed(event ->{ 
     if((event.getText().equals("%")) 
      System.out.println("It's work"); 
}); 
+0

Diese Lösung ist eine ziemlich schlechte ... Es hängt von der Tastaturbelegung ab und wird z.B. für das [AZERTY Layout] (https://en.wikipedia.org/wiki/AZERTY) – fabian

+0

Also, der Schlüssel ist DIGIT und isShiftDown, jetzt welcher Schlüssel ist es? – mohsenmadi

+1

Kann man Code klar lesen? es gibt DIGIT5 – GVArt