【问题标题】:Which is the best way to validate data in a JTextField?在 JTextField 中验证数据的最佳方法是什么?
【发布时间】:2010-09-06 02:27:51
【问题描述】:

我试过了,但是 JTextField 一直显示最后输入的键。我做错了什么?...

private void codigoKeyTyped(java.awt.event.KeyEvent evt) {
    //codigo is the JTextField
    String s = String.valueOf(evt.getKeyChar());
    try{
        Integer.parseInt(s);
    }catch(Exception e){
        codigo.setText("");    
    }
}

最后,我希望它删除最后一个字符并将整数值留在文本字段中。但我想在解决这个问题后会很简单。谢谢!

//回答!

感谢大家回答我的问题。最后我做了这个

private void codigoKeyTyped(java.awt.event.KeyEvent evt) {

    char c = evt.getKeyChar();

    if (! Character.isDigit(c)) {
        evt.consume();            
    }
}

【问题讨论】:

  • 谢谢!我说西班牙语,所以,我错了很多......对不起,谢谢!
  • 您是否知道侦听 KeyEvent 并非在所有情况下都有效?还有其他输入法。如果您希望收到有关文本更改的通知,则应始终使用 DocumentListener。就像汤姆说的那样,在这种情况下 DocumentFilter 是正确的方法。
  • 是的,我知道,但是,这对我的类来说只是一个简单的工作,这就足够了(这只是一个不超过 5 个字符的 JTextField,我不知道将所有代码放在这里)...但是我将学习如何使用 DocumentFilters,因为它似乎是最好的方法。我在 Java(大约两周)和编程(6 个月)方面完全是新手,所以,我不会用最好的表达方式来做事。我希望有一天我会。感谢您的回答!

标签: java swing validation


【解决方案1】:

我建议使用DocumentListener intead。示例代码见this example

【讨论】:

    【解决方案2】:

    使用键侦听器(甚至是文档侦听器)不适合此任务。可以说侦听器模型不适合输入事件。您希望您的侦听器代码在插入键值的侦听器代码之前还是之后运行?您将如何处理复制和粘贴击键以及鼠标驱动的拖放操作?

    处理这个问题的方法是使用DocumentFilter

    【讨论】:

      【解决方案3】:

      一旦用户准备好做某事...例如,单击“确定”按钮,您就必须阅读您的 JTextField。创建这样一个按钮并将以下代码放入其 ActionPerformed 方法中:

      String idtxt = codigo.getText();
      
      int id = Integer.parseInt(idtxt);
      

      目前,您的 JTextField 读取由 KeyEvent 触发,evt.getKeyChar() 返回被按下的键。该事件可能有助于发出“咔哒”声,但不适用于整数 > 一位数!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-02
        相关资源
        最近更新 更多