我的程序中有一个jFormattedTextField,当jFormattedTextField值有效更改时,我需要更新jLabel的文本。
实际上jFormattedTextField获取一个数字,jLabel在这个数字和另一个数字之间显示差异
我目前通过听jFormatted文本的“FocusLost”事件来做到这一点。
我该怎么做?
答案 0 :(得分:13)
将属性“value”的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:前者经常被通知(在解析发生之前,在每个键入的情况下),后者太脆弱了。
答案 1 :(得分:1)
执行此操作的最简单方法可能是使用您附加到文本字段的javax.swing.event.DocumentListener
。然后,当用户键入时,可以更新标签。
我不记得确切的序列,但可以在验证格式化文本字段之前调用侦听器的insertUpdate()
。因此,您可能还需要在监听器中检查有效数字。