在jFormattedTextField上放置“On Change”监听器

时间:2011-09-01 11:45:45

标签: java swing events listen jformattedtextfield

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

我该怎么做?

2 个答案:

答案 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()。因此,您可能还需要在监听器中检查有效数字。