2016-12-22 2 views
0

Derzeit zeigt meine Anwendung, die Eingabe ist, wenn das folgende Ereignis eintritt:eine Stringlänge Vergleichen nach 1 Sekunde mit der gleichen Zeichenfolge

textfield.setOnKeyPressed((keyEvent) -> {     
    if(keyEvent.getCode().isDigitKey() || keyEvent.getCode().isLetterKey() || 
     keyEvent.getCode().isModifierKey() || keyEvent.getCode().isWhitespaceKey() || 
     keyEvent.isShiftDown()){ 
      whoTypes(); 
} 

Aber ich möchte, dass, wenn der Benutzer nicht die Eingabe oder Eingabe stoppt, sollte es zeigen nichts.

Ich möchte, dass nach 1 Sekunde, sollte es überprüfen, ob das Textfeld die gleiche Länge wie es vorher war. Wenn die Länge gleich ist, zeigt der Bildschirm an, dass der Benutzer nicht mehr schreibt. Wenn sich die Länge von der vor dieser Sekunde unterscheidet, wird weiterhin angezeigt, dass der Benutzer tippt.

+0

definieren "gestoppt". 1 Sekunde? 100 Millisekunden? Sie müssen sich zuerst entscheiden und müssen wahrscheinlich einen Timer verwenden, der nach jedem Tastendruck deaktiviert und wieder aktiviert wird. –

+0

Sie benötigen einen Rückruf beim Timer, keinen Rückruf bei Tastendruck. – Arkadiy

Antwort

2

Beachten Sie, dass Sie nicht wirklich für Tastendrücke testen wollen; Sie möchten wissen, ob sich der Text geändert hat. Beispielsweise könnte der Benutzer die Maus zum Kopieren und Einfügen in das Textfeld verwenden. Daher sollten Sie Ihren Listener mit dem textProperty() des Textfelds registrieren, anstatt einen Key-Event-Listener zu verwenden.

Sie können etwas tun:

PauseTransition timer = new PauseTransition(Duration.seconds(1)); 
textField.textProperty().addListener((obs, oldText, newText) -> 
    timer.playFromStart()); 
timer.setOnFinished(e -> System.out.println("Text field idle for one second")); 
+0

Das hat einfach perfekt funktioniert, verdammt, Mann. Du bist großartig, vielen Dank !!!! Wenn ich könnte, würde ich Sie 1000000 mal bewerten. –

Verwandte Themen