Bei Eingabe von MyTextFieldMaxLength2:
a) '1' markieren und auf Nummer 9 klicken => wird ersetzt = '9'. .. ok
b) '12' markieren und auf Nummer 9 klicken => nichts passiertJavaFX: eigenes TextField mit maximal 2 Zeichen ... kann nicht alle markierten Zeichen ersetzen
Wie kann ich bekommen, dass selbst wenn alle zwei Nummern markiert sind, diese durch eine neue Nummer ersetzt wird?
public class MyTextFieldMaxLength2 extends TextField {
public boolean ifCondition_validate(String text) {
return (getText().length() < 2 || text.equals("")) && text.matches("[0-9]*");
}
@Override
public void replaceText(int start, int end, String text) {
if (ifCondition_validate(text)) {
super.replaceText(start, end, text);
}
}
@Override
public void replaceSelection(String text) {
if (ifCondition_validate(text)) {
super.replaceSelection(text);
}
}
}
Zunächst einmal vielen Dank für die Lösung. Ich arbeite an einer großen grafischen Anwendung mit dem SceneBuilder. Ich mag das Konzept eigener TextField-Klassen mit speziellen Eigenschaften zu bauen und dann einheitlich über SceneBuilder zu verwenden. Ich hatte gehofft, dass es eine Lösung für das Problem direkt in der MyTextFieldMaxLength2-Klasse gibt, so dass die Funktionalität innerhalb der abgeleiteten TextField-Klassen sauber gebündelt werden kann. Ich werde noch ein paar Tage warten, vielleicht hat jemand eine Idee. Im anderen Fall nehme ich Ihre Lösung. Danke noch einmal. – Sten
@Sten warum verwenden Sie diese Lösung nicht einfach in einer Textfeldunterklasse? –
Ich habe meine Idee mit der TextField-Unterklasse verworfen. Ich bleibe bei deinem direkten Ansatz und habe nur die Filtermethode als statisch neu aufgebaut. Also muss ich die Filtermethoden verwenden, z.B. "filter_onlyMax2Numbers", "filter_only0xOr1xComma" nur einmal und kann sie dann überall in der Anwendung verwenden. So funktioniert es sehr gut. Vielen Dank. – Sten