Jak w JTextField zablokować wprowadzanie pewnych znaków. Np. aby możliwe było wprowadzanie tylko liczb?
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.
A skąd mogę wziąc ten znak, któy mam sprawdzić?
To przerób:
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.
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.
Działa świetnie xD A przy okazji podszkoliłem się w używaniu wyrażeń regularnych. Dzięki =)