如何在用户输入时获取JTextField内容的长度?
-
03-07-2019 - |
题
JTextField有一个keyTyped事件,但似乎在它触发时,单元格的内容尚未更改。
因为在这里读取.length()总是错误的。
必须有一种简单的方法来获得按键击中后用户看到的长度吗?
解决方案
这可能不是最佳方式(并且已经有一段时间了),但在过去,我已经向JTextField和任何事件添加了一个DocumentListener(插入,更新,删除)I:
evt.getDocument().getLength()
返回文本字段内容的总长度。
其他提示
在处理关键事件之前,会通知听众 允许听众“窃取”消费它们的事件。这给了 兼容旧的消费事件的概念。
“打字” 事件并不意味着文本已输入组件。这不是 这是一种行为。
一种可能的解决方案是收听相关文件
// 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
}
});
注意无论文本如何变化,这都有效;通过剪贴板剪切/粘贴,progamatic" setText()"在TextField上,或用户在UI上输入字段。
KeyEvent
是这里不合适的低级事件[听起来很熟悉]。
JTextField
系统如何知道某个字符已被输入?通过一个关键的类型事件(IIRC,通过PL& F完成)。事件是否在侦听器之前调度到系统侦听器?它可能会也可能不会。
在这种情况下,您可能希望转到 Document
并添加更高级别的侦听器。使用Swing,早期使用模型是一个好主意 - 'J'类接口是不连贯的。如果您正在拦截输入数据,那么您可能需要自定义模型(或者在 Document
a DocumentFilter
的情况下)。
使用此代码:
public void jTextField6KeyReleased(java.awt.event.KeyEvent evt)
{
System.out.println(jTextField6.getText().length());
}
不隶属于 StackOverflow