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