【问题标题】:Java binding JTextField -> java.lang.Integer problemJava 绑定 JTextField -> java.lang.Integer 问题
【发布时间】:2010-10-11 05:22:36
【问题描述】:

我有一个与 Integer 变量绑定的文本字段,因此当用户在此字段中输入数字时,绑定机制会自动将文本转换为 Integer 并将此值设置为 var。问题是,由于用户在文本字段中键入文本,该绑定机制仅转换值,如果用户在其中键入一些字母,绑定将不会激活,因为文本字段内没有合法值。在这种情况下我需要什么,绑定必须触发 null 值的更改,所以我的 Integer var 中有 null。

所以,如果用户将这个字段留空或者不是数字,绑定将不得不触发空值传播;不要忽略事件......如果没有在文本字段上设置事件,我怎么能做到这一点?

java 绑定是否能够改变其默认行为?

【问题讨论】:

    标签: java binding


    【解决方案1】:

    除了改变绑定机制的行为之外,您还可以将 Formatter 放入只接受数字的 TextField 中。您需要为此扩展 javax.swing.text.DefaultFormatter。然后您将使用 JFormattedTextField 而不是普通的 JTextField。

    结果是您只能在文本字段中获得有效输入,而不必使用不正确的值进行任何操作。

    【讨论】:

    • 好吧,直到用户删除文本字段中的最后一个字符,Integer 才会保持最后的合法状态,不会为 null
    【解决方案2】:

    您需要的是JFormattedTextField 和NumberFormat。

    【讨论】:

      【解决方案3】:

      Swing 对受限文本输入的支持令人震惊。 JFormattedTextField 会给你一个非常糟糕的用户体验。与大多数有趣的 Swing 工作一样,忽略 JComponent 并选择模型。在这种情况下Document,尤其是DocumentFilter。

      (编辑:原始答案链接到一个简单的 Swing 应用程序,该应用程序使用限制为我之前准备的整数的文本字段。)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-24
        • 2015-02-13
        相关资源
        最近更新 更多