【问题标题】:How to allow only floats in a JTextField in Java如何只允许在 Java 中的 JTextField 中浮动
【发布时间】:2012-02-02 23:11:06
【问题描述】:

我正在尝试在我的程序中添加一个简单的货币转换器工具,但我遇到了障碍。有没有一种简单的方法只允许浮点数作为 Java 中 JTextField 的输入。从我在网上阅读的内容来看,使用 JFormattedTextField 是一件很痛苦的事情。我需要创建一个类来进行过滤吗?

【问题讨论】:

  • 不要相信您在网上阅读的所有内容 :-) 它当然有一个学习曲线,但从头开始更令人生畏......并且不会经过彻底的测试

标签: java swing validation jtextfield


【解决方案1】:

JFormattedTextField 不应该太难。只需要传入一个 Formatter 作为参数并且应该自己处理。您可以从使用区域设置的 java API 中获取,如下所示:

new JFormattedTextField(java.text.NumberFormat.getCurrencyInstance());

【讨论】:

    【解决方案2】:

    最好使用JFormattedTextField

    格式化文本字段为开发人员提供了一种方法来指定可在文本字段中键入的有效字符集。具体来说,JFormattedTextField 类将格式化程序和对象值添加到从 JTextField 类继承的特征中。格式化程序将字段的值转换为它显示的文本,并将文本转换为字段的值。 See examples.

    【讨论】:

      【解决方案3】:

      您可以使用JFormattedTextField,但它会提供非常糟糕的用户体验。最好在输入时丢弃不适当的字符。 DocumentFilter 提供了一种相对(对于 Swing 而言)干净的方式来执行此操作。 (编辑:原始答案有链接到我在我现在已经不复存在的博客上写的一个简单的例子。)

      【讨论】:

        【解决方案4】:

        我同意 vcetinick,因为 JFormattedTextField 对于格式化文本输入很有用。

        但是,如果要验证JTextField中输入的值,可能需要自己实现ActionListener:

        public void actionPerformed(ActionEvent evt) {
            JTextField textfield = (JTextField)evt.getSource();
            String strTextValue = textfield.getText();
            try {
                if (strTextValue.equals("")) {
                   // Handle empty string
                } else {
                   double dValue = Double.parseDouble(strTextValue);
                   // Handle valid value
                }
            } catch (Exception e) {
                // Handle invalid value
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2012-03-17
          • 2011-08-05
          • 1970-01-01
          • 2020-03-09
          • 2018-09-08
          • 1970-01-01
          • 1970-01-01
          • 2013-08-08
          • 2013-08-12
          相关资源
          最近更新 更多