Metoda, ktora podal Koziołek jest krokiem we wlasciwa strone. Jak sie uzytkownikowi nie da mozliwosci wprowadzania glupot, to nie bedzie go kusilo. Co do samego rozwiazania, tj. nasluchiwanie przy pomocy interfejsu KeyListener, to nie sprawdzi sie ona w przypadku wklejania tekstu skrotem Ctrl+C/Ctrl+V. Lepszym sposobem jest stworzenie wlasnego "kontrolera" dokumentu bazujacego na PlainDocument:
class JDigitField extends JTextField {
public JDigitField() {
setDocument(new DigitDocument());
}
private class DigitDocument extends PlainDocument {
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
// przefiltrowanie lancucha wejsiowego "str"
for(char c : str.toCharArray) {
if(!Character.isDigit()) {
return;
}
super.insertString(offs, str, a);
}
}
}
}
Problem w tym, ze parsowanie liczb rzeczywistych, dodatkowo ze znakiem, moze znacznie skomplikowac kod.
Wyrazenia regularne nie bylyby takim zlym pomyslem. Liczby rzeczywiste mozna sprawdzic np. w ten sposob:
String s = "-.5";
Pattern pattern = Pattern.compile("^[-+]?((\\d*[.]?\\d+)|(\\d+[.]?\\d*))");
Matcher matcher = pattern.matcher(s);
if(matcher.matches()) {
float value = Float.parseFloat(s);
}
Podane wyrazenie pozwala wprowadzic liczby z/bez znaku oraz pominac liczbe zarowno przed jak i po kropce dziesietnej. To rozwiazanie nie ma zastosowania do notacji wykladniczej.