JavaFX TextField : KeyEvent nach Zahlen filtern

08.12.2015

Verwendet man in JavaFX das Control TextField für die Eingabe von Daten, so kann es sinnvoll sein, nur bestimmte Zeichen bspw. Zahlen zuzulassen. Wenn ich dafür nicht extra eine neue Klasse erstellen möchte, dann kann es sinnvoll sein, einen EventHandler hinzuzufügen, der das Event KEY_TYPED abfängt. …

Ich kann dann das im Event übergebene Zeichen auslesen und entscheiden, ob ich das Event weiterverarbeiten möchte oder nicht.

myTextField.addEventHandler(KeyEvent.KEY_TYPED, new EventHandler<KeyEvent>() {
   @Override
   public void handle(KeyEvent event) {
      // Wenn das eingegebene Zeichen nicht den Zahlen 0-9 entspricht, ...                 
      if ( !(event.getCharacter().matches("[0-9]"))) {
         // ... dann wird das Event nicht weiter verarbeitet.
         event.consume();
      }
   }     
});

Die Alternative wäre die Erstellung einer eigenen Klasse die von TextField abgeleitet ist. Beispielsweise mit dem Namen NumberTextField. Dies macht insbesondere dann Sinn, wenn man das Control in größeren Anwendungen häufig wiederverwenden möchte.

public class NumberTextField extends TextField implements ChangeListener<String> {

   @Override 
   public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
      if (newValue.matches("[0-9]")) {
         setText(newValue);
      }
      else {
         setText(oldValue);
      }
   }
}

 

 

Zurück zur Übersicht

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*Pflichtfelder

*