2015-06-17 28 views
5

Ich habe eine JavaFX TextField- Kontrolle auf meinem FXMl in Großbuchstaben, die so aussieht ...JavaFX TextField-: verwandeln automatisch Text

<TextField fx:id="input_search" onKeyPressed="#keyListener" prefHeight="25.0" prefWidth="197.0" /> 

Ich möchte automatisch Änderung alle Zeichen Groß wenn der Benutzer tippt.

Der Code in meinem Controller:

public void keyListener(KeyEvent event){ 
    //maybe transform the pressed key to uppercase here... 
} 

Antwort

9

Statt die onKeyPressed auf TextField- zu verwenden, die textProperty() Ihrer TextField- verwenden. Fügen Sie einfach den folgenden Code innerhalb des initialize() des Controllers hinzu.

input_search.textProperty().addListener((ov, oldValue, newValue) -> { 
    input_search.setText(newValue.toUpperCase()); 
}); 
+0

Danke, das funktioniert Magic! – Martin

5

Beginnend mit JavaFX 8u40, können Sie ein TextFormatter Objekt auf einem Textfeld gesetzt. Auf diese Weise können Sie einen Filter/Konverter auf die Benutzereingabe anwenden. Here's an example.

Das Abhören von Änderungen in der Texteigenschaft hat den Nachteil, dass zwei Änderungsereignisse ausgelöst werden, eines für die Anfangseingabe (in Ihrem Fall die Kleinbuchstaben) und ein anderes für die korrigierte Eingabe (die Großbuchstaben). . Wenn sich andere Listener in der Eigenschaft text befinden, müssen sie sich mit beiden Ereignissen befassen und entscheiden, welches Ereignis für sie relevant ist. Der TextFormatter-Ansatz hat diesen Nachteil nicht.

+0

Danke, ich habe etwas Neues gelernt. Aber es scheint einen weiteren Nachteil zu geben. Ein TextField mit einem TextFormatter-Set scheint das ESC KeyEvent zu konsumieren. Ich habe keine Zeit, es jetzt zu recherchieren, aber der Grund könnte sein, dass mit ESC die aktuelle Bearbeitung abgebrochen wird: http://stackoverflow.com/a/38059343/3519572 – tomorrow

Verwandte Themen