JavaFX in TextField nur int Werte?
Hallo Leute, kurze Frage..
Meine Controller Klasse:
package de.ausbildung.numbersort;
import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.TextField;
public class Controller {
@FXML private void btStart(ActionEvent event) {
}
@FXML private TextField lbAusgabe;
@FXML private Button rdButton;
@FXML private Button rdButton1;
@FXML
private void tbEingabe() {
}
}
Wie kann ich den Controller(TextField) überprüfen lassen ob ich eine Zahl eingegeben habe? Es dürfen keine Buchstaben reingeschrieben werden. Wenn ein Buchstabe geschrieben wird soll eine Fehleremeldung erscheinen….
Am besten soll es ganz einfach geschrieben sein und mit Kommentar daneben :)
vielen Dank im voraus
4 Antworten
Wenn erst bei einem Button geprüft werden soll, dann kannst du einfach ein Pattern verwenden. (In diesem Fall vorkompilieren, das ist schneller)
Man kann aber auch die Eingabe auf nur Zahlen begrenzen, einfach einen ChangeListener zu der Text Property des Textfields hinzufügen, falls die Eingabe nicht nur Zahlen enthält, einfach wieder den vorherigen Wert setzen.
Zur Validierung ist die Antwort von Enarus sehr gut.
Was die Fehlerausgabe betrifft, verwende hier die Klasse: Alert.
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("Fehler...");
alert.setHeaderText("Eingabevalidierung");
alert.setContentText("Der enthaltene Text enthält keine Zahlen!");
alert.showAndWait();
(Verfügbar ab: Java8, Update 40)
Ich würde einfach gucken, ob sich die Zahl verarbeiten lässt:
int testzahl = 0; // int-Variable erzeugen
try
{
testzahl = Integer.parseInt("bla"); // versuchen, der int-Variable einen Text zuzuweisen
System.out.println(testzahl); // diese Zeile wird gar nicht ausgeführt, weil ein Fehler auftritt
}
catch (NumberFormatException e)
{
System.out.println("Bitte nur Zahlen eingeben"); // Hier kannst du halt sagen, was passiert, wenn die Zahl sich nicht verarbeiten lässt
}
Statt dem "bla" muss natürlich der Inhalt des Textfeldes rein.
Hey du kannst folgendes nutzen:
lbAusgabe.matches("[0-9]*")
gibt dir einen Boolean zurück, kannst dir also entweder noch selber eine validator Methode schreiben die bspw so aussehen könnte:
private boolean validate(String eingabe){
return eingabe.matches("[0-9]*");
}
oder eben direkt in einer if-Abfrage prüfen. Hoffe das hilft.