2016-10-10 6 views
-2

Я делаю эту форму, которая запрашивает имя, фамилию, пол, рост и т. Д. Я добавил keyTyped обработчик действий для проверки целостности (имена только буквы, возраст максимум 2 числа и т. Д.)Как обновить значение JTextField, чтобы соответствовать реальному значению?

Дело в том, что шашки работают, но значение, которое я вижу в форме, не соответствует реальному значению, например, я пишу '1.333' (в метрах) для Height, checker выполняет свою работу и сообщает пользователь, который принимает только значения, такие как 1.33.

Так что я использовал

formattedTextField.setText(StringUtils.substring(formattedTextField.getText(), 0, 4)); 

Если я пишу 1.333 в TextField, реальное значение, хранящееся в 1,33, НО 1,333 остается в TextField

Это то, что я пытался

formattedTextField = new JFormattedTextField(); 
    formattedTextField.addKeyListener(new KeyAdapter() { 
     @Override 
     public void keyTyped(KeyEvent arg0) { 
      String re1="^([+-]?\\d*\\.?\\d*)$"; 
      System.out.println(formattedTextField.getText().matches(re1)); 
      if(formattedTextField.getText().length() >= 1 && formattedTextField.getText().matches(re1) == true) 
      {      

       if(formattedTextField.getText().length() >= 3) 
       { 
        final BalloonTip balloonTip = new BalloonTip(
          formattedTextField, 
          new JLabel("<html>Solo se aceptan valores de altura, como 1.66, 1.76, 1.88, etc..</html>"), 
          style, 
          BalloonTip.Orientation.LEFT_ABOVE, 
          BalloonTip.AttachLocation.ALIGNED, 
          20, 10, 
          false 
         ); 
        TimingUtils.showTimedBalloon(balloonTip, 4500); 
        formattedTextField.setText(StringUtils.substring(formattedTextField.getText(), 0, 4)); 



       } 
      } 

     } 
    }); 
contentPane.add(formattedTextField, "cell 2 9,growx,aligny center"); 

Example

+4

В соответствии с комментариями к вашему предыдущему вопросу [] (http://stackoverflow.com/questions/ 39864104/how-can-add-a-button-to-get-two-values), создайте и опубликуйте действительный [mcve]. Это не ваша целая программа, а очень простая простая программа, которая демонстрирует вашу проблему для нас. –

+0

И вы никогда не хотите использовать KeyListener в текстовом компоненте Swing. Опять же, пожалуйста, улучшите свой вопрос, если вам нужен лучший ответ. –

ответ

2

Попробуйте это: Cre съела 3 глобальные переменные:

private String oldValue; 
private final Pattern pattern = Pattern.compile("^\\d+\\.?\\d{0,2}$"); 
private Matcher matcher; 

И вам нужно хранить старое значение и comprare новое значение с регулярным выражением

formattedTextField.addKeyListener(new KeyAdapter() { 
    public void keyPressed(KeyEvent evt) { 
      oldValue = formattedTextField.getText(); 
    } 

    public void keyReleased(KeyEvent evt) { 
     matcher = pattern.matcher(formattedTextField.getText()); 
     if(!matcher.matches()){ 
      formattedTextField.setText(oldValue); 
     } 
    } 
} 

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

  • Нет связанных вопросов^_^