[JTextField] Jak zablokować wprowadzanie pewnych znaków?

0

Jak w JTextField zablokować wprowadzanie pewnych znaków. Np. aby możliwe było wprowadzanie tylko liczb?

0

Hej użyj w textfiedzie documentListenera albo keylistenera nie pamietam

Jeśli wpisany był znak != liczby, to wywołujesz e.consume(), gdzie e - to key event, lub document event, nie pamietam.

0

A skąd mogę wziąc ten znak, któy mam sprawdzić?

0

Jeszcze nie sprawdzałem, czy kod działa ;P Ale z tego co widzę, prawdopodobnie zawiedzie, gdy użytkownik wklei coś do pola tekstowego :(

DocumentListener informuje o każdej zmianie dokonanej w polu, ale nie wiem, jak pobrać tylko te dane, które zostały wprowadzone.

0

Ja rozwiązałem ten problem mniej więcej takim kodem:

JTextField textField = new JTextField();
		expressionDocument = new ExpressionDocument();
		textField.setDocument(expressionDocument);

I moja klasa ExpressionDocument (tylko istotny fragment):

public class ExpressionDocument extends PlainDocument {
@Override
	public void insertString(int offset, String str, AttributeSet attr)
			throws BadLocationException {
		
		//value = value.replace('\u2081', '1');
		super.insertString(offset, str, attr);
		String value = this.getText(0, this.getLength());
		for (String pattern : patterns) {//tu sprawdzam, czy wpisany albo wklejony tekst 
			if (value.matches(pattern)) {//pasuje do jakiegoś z wyrażeń regularnych
				return;//i wtedy jest przypisany
			}
			
		}
		remove(offset, str.length());//jeżeli nie, to usuwany jest dodany fragment, a to co //było pozostaje
		Toolkit.getDefaultToolkit().beep();
		return;
	}
}

To rozwiąże problem tego, że dane mogą być wklejane no i tego ile tekstu było przedtem. Napisanie odpowiedniego RegExp upraszcza sporo kwestii związanych ze sprawdzaniem. Ja akurat używałem tablicy różnych wyrażeń, ale mogłoby być to w jedno sklejone.

0

Działa świetnie xD A przy okazji podszkoliłem się w używaniu wyrażeń regularnych. Dzięki =)

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