JavaFX - TextField

0

Witam.
Ma ktoś pomysł jak w JavieFX ustawić odstępy między kolejnymi trójkami cyfr w TextFieldzie?
Np. żeby 6545654 już podczas wpisywania formatowało się na 6 545 654.

I czy jest możliwość, aby ustawić blokadę, że np. tylko 4 znaki maksymalnie można wpisać?

Z góry dzięki za pomoc.

1

Drugi przypadek bardzo łatwo:

textField.textProperty().addListener((observable, oldValue, newValue) -> {
	if (newValue.length() > 4) {
		textField.setValue(oldValue);
	}
});

Pierwszy przypadek analogicznie, po prostu gdy długość Stringa jest większa niż 3 musisz wstawić spacje w odpowiednie miejsca i tak przygotowany String wstawić do textFielda.

0

Wracając do kwestii oddzielania kolejnych trójek liczb, wykonałem to trochę w pokraczny sposób, no ale działa:


tIlosc.textProperty().addListener((observable, oldValue, newValue) -> {

			licznikPom++;
			

			if (licznikPom == 5) {
				StringBuffer tIloscPom = new StringBuffer(newValue);
				tIloscPom.insert(2, " ");
				tIlosc.setText(tIloscPom.toString());

			}

			if (licznikPom == 7) {
				StringBuffer tIloscPom = new StringBuffer(newValue);

				tIloscPom.deleteCharAt(2);
				tIloscPom.insert(3, " ");

				tIlosc.setText(tIloscPom.toString());

			}

			if (licznikPom == 9) {
				StringBuffer tIloscPom = new StringBuffer(newValue);

				tIloscPom.deleteCharAt(3);
				tIloscPom.insert(4, " ");
				tIloscPom.insert(1, " ");

				tIlosc.setText(tIloscPom.toString());

			}
//itd.. itd.. itd

		});

Daje taki efekt:
1234
12 345
123 456
1 234 567
itd..

Problem jednak jest przy poprawianiu już zedytowanego TextFielda, wszystko się rozkracza. Ale nie jest to znowu taki istotne dla mnie, bo to oddzielanie trójek, to miała być tylko taka kosmetyka, więc przy ponownym kliknięciu na ten TextField, jest on ustawiany na String = "".
Pozostaje jednak kwestia kliknięcia w backspace, wtedy też bym chciał czyścić całe textField. 1 kliknięcie = czyszczenie całego pola.

Jestem mnie ktoś w stanie pokierować jak to wykonać?

Z góry dzięki.

0

Zamiast rzeźbić ręcznie to co dawno wyrzeźbione przeczytaj: https://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html
W Twoim przypadku bardzo łatwo: bierzesz newValue, usuwasz spacje, parsujesz do inta, przepuszczasz przez formatter i masz wyjściową postać sformatowaną. jak książka pisze. I to niezależnie od tego czy ktoś dodał, usunął znak czy usunął całość. Domyślam się, że chęć usuwanie wszystkiego po naciśnięciu delete/backspace wynika z tego, że nie wychodzi Ci formatowanie przy usuwaniu. Jeżeli w dalszym ciągu chcesz czyścić pole to najprościej dodać keyListener do TextFileda (metoda onKeyTyped)

1 użytkowników online, w tym zalogowanych: 0, gości: 1