我的程序中有一个 jFormattedTextField,当 jFormattedTextField 值已有效更改时,我需要更新 jLabel 的文本。
实际上 jFormattedTextField 得到一个数字,而 jLabel 显示这个数字和另一个数字之间的差异。
我目前通过收听 jFormatted 文本的“FocusLost”事件来做到这一点。
我怎样才能做到这一点?
我的程序中有一个 jFormattedTextField,当 jFormattedTextField 值已有效更改时,我需要更新 jLabel 的文本。
实际上 jFormattedTextField 得到一个数字,而 jLabel 显示这个数字和另一个数字之间的差异。
我目前通过收听 jFormatted 文本的“FocusLost”事件来做到这一点。
我怎样才能做到这一点?
将属性“值”的 PropertyChangeListener 注册到 formattedField
PropertyChangeListener l = new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
String text = evt.getNewValue() != null ? evt.getNewValue().toString() : "";
label.setText(evt.getNewValue());
}
};
formattedTextField.addPropertyChangeListener("value", l);
不要使用 DocumentListener 或 FocusListener:前者被通知得太频繁(在每次键入时,在解析发生之前)后者太脆弱。
可能最简单的方法是使用javax.swing.event.DocumentListener
附加到文本字段的 a。然后,随着用户键入,可以更新标签。
我不记得确切的顺序,但insertUpdate()
可以在验证格式化文本字段之前调用侦听器。因此,您可能还需要检查侦听器中的有效数字。