JTextField有一个keyTyped事件,但它似乎在触发时单元格的内容尚未更改。如何在用户类型中获取JTextField内容的长度?
因为.length()在这里读取总是错误的。
必须有一个简单的方法来获得长度,因为它在键击后显示给用户?
JTextField有一个keyTyped事件,但它似乎在触发时单元格的内容尚未更改。如何在用户类型中获取JTextField内容的长度?
因为.length()在这里读取总是错误的。
必须有一个简单的方法来获得长度,因为它在键击后显示给用户?
这可能不是最佳的方式(它已经有一段时间),但在过去,我已经加了的DocumentListener到的JTextField和任何事件(插入,更新,删除)I:
evt.getDocument().getLength()
它返回文本字段内容的总长度。
这可能与此有关"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()”,或者在用户界面上键入字段中的用户。
KeyEvent
s是低级别的事件,在这里不适合[听起来很熟悉]。
JTextField
系统如何知道输入了一个字符?通过键盘输入事件(IIRC,通过PL & F完成)。你的监听器之前事件是否被分派到系统监听器?它可能会或可能不会。
在这种情况下,您可能想要转到Document
并添加更高级别的侦听器。对于Swing来说,尽早推出模型是个好主意 - 'J'类接口是不连贯的。如果您正在截取输入数据,那么您可能需要一个自定义模型(或者在Document
a DocumentFilter
的情况下)。
使用此代码:
public void jTextField6KeyReleased(java.awt.event.KeyEvent evt)
{
System.out.println(jTextField6.getText().length());
}
考虑扩大你的答案来解释给提问者为什么,这达到预期的结果,可能链接到文档。如此,这仅仅是有用的。 – 2013-10-08 16:10:57