JTextField有一个keyTyped事件,但似乎在它触发时,单元格的内容尚未更改。

因为在这里读取.length()总是错误的。

必须有一种简单的方法来获得按键击中后用户看到的长度吗?

有帮助吗?

解决方案

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

evt.getDocument().getLength()

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

其他提示

这可能与此“bug”有关。 (或者更确切地说是“功能”)

  

在处理关键事件之前,会通知听众   允许听众“窃取”消费它们的事件。这给了   兼容旧的消费事件的概念。
  “打字”   事件并不意味着文本已输入组件。这不是   这是一种行为。

一种可能的解决方案是收听相关文件

// 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());
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top