JTextField 有一个 keyTyped 事件,但似乎在它触发时单元格的内容尚未更改。
因此,如果在此处阅读, .length() 总是错误的。
必须有一种简单的方法来获取用户击键后出现的长度?
JTextField 有一个 keyTyped 事件,但似乎在它触发时单元格的内容尚未更改。
因此,如果在此处阅读, .length() 总是错误的。
必须有一种简单的方法来获取用户击键后出现的长度?
这可能不是最佳方式(并且已经有一段时间了),但在过去,我已经向 JTextField 和任何事件(插入、更新、删除)添加了 DocumentListener:
evt.getDocument().getLength()
它返回文本字段内容的总长度。
这可能与此“错误”(或更确切地说是“功能”)有关
在处理关键事件之前,侦听器会被通知关键事件,以允许侦听器通过使用它们来“窃取”事件。这提供了与消费事件的旧 awt 概念的兼容性。
“typed”事件并不意味着文本被输入到组件中。这不是错误,而是预期的行为。
一个可能的解决方案是收听相关的文档
// 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 上的程序化“setText()”或用户在 UI 上的字段中键入。
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());
}