От docs:
Выдает: NumberFormatException - если строка не содержит оформленного целого числа.
пустая строка ""
не интерпретируемое целое, так что ваш код всегда будет производить NumberFormatException
, если значение не вводится.
Существует много способов избежать этого. Вы можете просто проверить, действительно ли значение String
, полученное вами от amountField.getText()
, заполнено. Вы можете создать пользовательский IntegerField
, который позволяет вводить только целые числа, но добавляет Document к JTextField
.Создание документа, чтобы только целые числа вход:
public static class IntegerDocument extends PlainDocument {
@Override
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
StringBuilder sb = new StringBuilder(str.length());
for (char c:str.toCharArray()) {
if (!Character.isDigit(c)) {
sb.append(c);
}
}
super.insertString(offs, sb.toString(), a);
}
}
Теперь создать IntergerField
с удобным getInt
метод, который возвращает ноль, если ничего не введено:
public static class IntegerField extends JTextField {
public IntegerField(String txt) {
super(txt);
setDocument(new IntegerDocument());
}
public int getInt() {
return this.getText().equals("") ? 0 : Integer.parseInt(this.getText());
}
}
Теперь вы можете получить целочисленное значение из amountField
без выполнения каких-либо проверок:
JTextField amountField = new IntegerField("15");
...
//amount will be zero if nothing is entered
int amount = amountField.getInt();
использовать JFormattedTextField с номером форматера, больше в Oracle учебнике JSpinner правильно возможных ш ays тоже, также есть комбинации JTextField и DocumentFilter, все древовидные пути здесь много раз около – mKorbel