12

我的程序中有一个 jFormattedTextField,当 jFormattedTextField 值已有效更改时,我需要更新 jLabel 的文本。
实际上 jFormattedTextField 得到一个数字,而 jLabel 显示这个数字和另一个数字之间的差异。
我目前通过收听 jFormatted 文本的“FocusLost”事件来做到这一点。

我怎样才能做到这一点?

4

2 回答 2

18

将属性“值”的 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:前者被通知得太频繁(在每次键入时,在解析发生之前)后者太脆弱。

于 2011-09-01T13:35:21.940 回答
1

可能最简单的方法是使用javax.swing.event.DocumentListener附加到文本字段的 a。然后,随着用户键入,可以更新标签。

我不记得确切的顺序,但insertUpdate()可以在验证格式化文本字段之前调用侦听器。因此,您可能还需要检查侦听器中的有效数字。

于 2011-09-01T12:20:16.367 回答