2010-11-21 28 views
1

我有一个InputVerifierjTextField检查并查看来自用户的输入是否是整数。如果不是,我想把它恢复到最后的好价值。我如何做到这一点?这里是我到目前为止的代码:恢复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; 
    } 

} 

编辑:下面是我最终使用的解决方案。我最初尝试过这个,但似乎没有工作。我发现错误在测试中。启动gui后,我试图将文本字段更改为无效值,但会将该字段清空。然而,gui刚开始的时候textfield就有了重点,所以我认为它的初始值是空的。后续更改的行为如预期。

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,只是传递字符串值。