2008-12-30 45 views

回答

8

这可能不是最佳的方式(它已经有一段时间),但在过去,我已经加了的DocumentListener到的JTextField和任何事件(插入,更新,删除)I:

evt.getDocument().getLength() 

它返回文本字段内容的总长度。

3

这可能与此有关"bug" (or rather "feature")

的听众事先通知的关键事件给他们处理,以 让听众通过消耗他们“偷”的事件。这给出了 与旧的awt消费事件概念的兼容性。
“键入” 事件并不意味着文本被输入到组件中。这不是一个 错误,它是打算的行为。

一个可能的解决方案是听一个associated Document

// Listen for changes in the text 
myTextField.getDocument().addDocumentListener(new DocumentListener() { 
    public void changedUpdate(DocumentEvent e) { 
    // text was changed 
} 
public void removeUpdate(DocumentEvent e) { 
    // text was deleted 
} 
public void insertUpdate(DocumentEvent e) { 
    // text was inserted 
} 
}); 

注意这部作品无论文本如何得到改变;通过剪贴板剪切/粘贴,在TextField上使用progamatic“setText()”,或者在用户界面上键入字段中的用户。

3

KeyEvent s是低级别的事件,在这里不适合[听起来很熟悉]。

JTextField系统如何知道输入了一个字符?通过键盘输入事件(IIRC,通过PL & F完成)。你的监听器之前事件是否被分派到系统监听器?它可能会或可能不会。

在这种情况下,您可能想要转到Document并添加更高级别的侦听器。对于Swing来说,尽早推出模型是个好主意 - 'J'类接口是不连贯的。如果您正在截取输入数据,那么您可能需要一个自定义模型(或者在Document a DocumentFilter的情况下)。

2

使用此代码:

public void jTextField6KeyReleased(java.awt.event.KeyEvent evt) 
{ 
    System.out.println(jTextField6.getText().length()); 
} 
+0

考虑扩大你的答案来解释给提问者为什么,这达到预期的结果,可能链接到文档。如此,这仅仅是有用的。 – 2013-10-08 16:10:57