2010-11-21 2 views
1

У меня есть InputVerifier для jTextField, чтобы проверить, является ли ввод от пользователя целочисленным. Если это не так, я хочу вернуть его к последнему хорошему значению. Как мне это сделать? Вот код, который я до сих пор:Вернуть 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; 
    } 

} 

EDIT: Ниже то, что я в конечном итоге, используя в качестве раствора. Сначала я попробовал это, но, похоже, он не работал. Я обнаружил, что ошибка была в тестировании. Я попытался изменить текстовое поле на недопустимое значение сразу после запуска gui, но он заполнил поле. Тем не менее, текстовое поле было сосредоточено, как только gui начал, так что исходное значение было нулевым, я думаю. Последующие изменения вели себя как и ожидалось.

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; 
    } 
} 

ответ

1

Ваш вопрос указывает на другую проблему, что комментарий в вашем коде. Вы должны сохранить старое значение после его проверки и вернуться, если текущий вход недействителен. Вы должны позвонить 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

Вместо прохождения JComponent, просто передать значение строки.

Смежные вопросы