2015-06-17 11 views
5

Mam kontroli JavaFX TextField na moim FXMl który wygląda tak ...JavaFX TextField: automatycznie przekształcić tekst na wielkie

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

Chcę automatycznie zmiany wszystkie znaki na wielkimi literami kiedy użytkownik pisze.

kod w moim kontrolera:

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

Odpowiedz

9

Zamiast onKeyPressed na TextField, użyj textProperty() swojego TextField. Wystarczy dodać następujący kod do kontrolera initialize().

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

Dzięki, działa Magic! – Martin

5

Począwszy od JavaFX 8u40, można ustawić obiekt TextFormatter na polu tekstowym. Pozwala to na zastosowanie filtru/konwertera na wejściu użytkownika. Here's an example.

Słuchanie zmian we właściwościach tekstu ma wadę wyzwalania dwóch zdarzeń zmian, jedną dla początkowego wprowadzenia (w przypadku małych liter) i drugą dla poprawionego wejścia (wielkie litery) . Jeśli istnieją inne obiekty nasłuchujące na własności tekstowej, będą musiały poradzić sobie z obydwoma zdarzeniami i zdecydować, które wydarzenie jest dla nich istotne. Podejście TextFormatter nie ma tej wady.

+0

Dzięki, nauczyłem się czegoś nowego. Ale wydaje się, że jest inna wada. TextField z zestawem TextFormatter wydaje się zużywać ESC KeyEvent. Nie mam czasu, aby to zbadać, ale powodem może być to, że z ustawieniem TextFormatter, ESC służy do anulowania aktualnej edycji: http://stackoverflow.com/a/38059343/3519572 – tomorrow

Powiązane problemy