提出“改变” jFormattedTextField 上的侦听器

发布于 2024-12-02 11:21:22 字数 204 浏览 2 评论 0原文

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

我该怎么做?

I have a jFormattedTextField in my program and I need to update a jLabel's text when jFormattedTextField value has been changed validly.
Actually jFormattedTextField gets a number and jLabel displays diffrence between this number and another number.
I currently do this by listenning to "FocusLost" event of jFormatted text.

How can i do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

去了角落 2024-12-09 11:21:22

为 formattedField 的属性“值”注册一个 PropertyChangeListener

    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:前者通知得太频繁(在解析发生之前,在每个键键入上),后者太脆弱。

register a PropertyChangeListener for the property "value" to the 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);

Do not use DocumentListener nor FocusListener: the former is notified too often (on every keytyped, before parsing happened) the latter is too brittle.

蓝戈者 2024-12-09 11:21:22

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

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

Probably the easiest way to do this is to use a javax.swing.event.DocumentListener that you attache to the text field. Then, as the user types, the label can be updated.

I don't remember the exact sequence, but the listener's insertUpdate() may be called before the formatted text field is validated. So, you may also need to check for valid numbers in your listener too.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文