Верните jTextField к последнему правильному значению - PullRequest
1 голос
/ 21 ноября 2010

У меня есть InputVerifier для jTextField, чтобы проверить и посмотреть, является ли ввод от пользователя целым числом.Если это не так, я хочу вернуть его к последнему хорошему значению.Как мне к этому?Вот код, который у меня есть на данный момент:

class IntegerVerifier extends InputVerifier {

    public boolean verify(JComponent input) {
            JTextField text = (JTextField)input;
            String old = text.getText();
        try {
            Integer.parseInt(text.getText().trim());
        } catch (NumberFormatException e) {
            // this does not work b/c input is not a TextField
            input.setText(old); 
        }
        return true;
    }

}

РЕДАКТИРОВАТЬ: Ниже приведено то, что я в конечном итоге использовал в качестве решения.Сначала я попробовал это, но оказалось, что это не работает.Я обнаружил, что ошибка была в тестировании.Я попытался изменить текстовое поле на недопустимое значение сразу после запуска графического интерфейса, но это бы очистило поле.Тем не менее, текстовое поле фокусировалось сразу после запуска графического интерфейса, поэтому его начальное значение было нулевым, я думаю.Последующие изменения вели себя как ожидалось.

class IntegerVerifier extends InputVerifier {
    public boolean verify(JComponent input) {
        JTextField text = (JTextField) input;
        String old = text.getText();
        try {
            Integer.parseInt(text.getText().trim());
        } catch (NumberFormatException e) {
            text.setText(old);
            //return false; // don't use this otherwise it won't revert the value
        }
        return true;
    }
}

Ответы [ 2 ]

1 голос
/ 21 ноября 2010

Ваш вопрос указывает на другую проблему, это комментарий в вашем коде. Вы должны сохранить старое значение после его проверки и восстановить его, если текущий ввод недействителен. Вам следует звонить text.setText(), а не input.setText(). Примерно так:

class IntegerVerifier extends InputVerifier {
    String lastGood = "";
    public boolean verify(JComponent input) {
        JTextField text = (JTextField)input;
        String value = text.getText().trim();
        try {
            Integer.parseInt(value);
            lastGood = value;
        } catch (NumberFormatException e) {
            text.setText(lastGood);
            // assumed it should return false
           return false;
        }
        return true;
    }
}
0 голосов
/ 21 ноября 2010

Вместо передачи JComponent, просто передайте строковое значение.

...