2010-09-06 182 views
1

我试过了,但JTextField不断显示输入的最后一个键。我做错了什么?...哪一个是验证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();    
    } 
} 
+1

其** **其中** btw – TheLQ 2010-09-06 04:29:49

+0

谢谢!我会说西班牙语,所以,我错误了很多......对不起,谢谢! – Roger 2010-09-08 00:50:17

+1

您是否知道在所有情况下侦听KeyEvent都不起作用?还有其他输入法。如果您想要收到有关文本更改的通知,则应始终使用DocumentListener。像汤姆说的那样,在这种情况下,DocumentFilter是正确的选择。 – Carlos 2010-09-10 15:30:01

回答

1

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

处理此问题的方法是使用DocumentFilter。这在my trivial Swing example blog entry中得到证明。

-2

一旦用户准备好做某事,你必须阅读你的JTextField ...例如,点击“OK”按钮。创建这样一个按钮,下面的代码放置在其actionPerformed方法:

String idtxt = codigo.getText(); 

int id = Integer.parseInt(idtxt); 

目前,您的JTextField读通过的KeyEvent()返回按下的键触发,与evt.getKeyChar。该事件对于制作“点击”噪音可能很好,但对于大于一位数的整数不起作用!

相关问题