如何只允许在 Java 中的 JTextField 中浮动

Posted

技术标签:

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

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

【问题讨论】:

不要相信您在网上阅读的所有内容 :-) 它当然有一个学习曲线,但从头开始更令人生畏......并且不会经过彻底的测试 【参考方案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
    

【讨论】:

以上是关于如何只允许在 Java 中的 JTextField 中浮动的主要内容,如果未能解决你的问题,请参考以下文章

JAVA中如何判断JTextField的一些问题?求高手解答……谢谢

如何从另一个 java 类中的 jTextField 或 jFormattedTextField 获取数据

如何从 A 类中的 JTextField 输入向 B 类中的数据库插入值

有没有办法只接受 JTextField 中的数值?

如何确保 JTextField 只包含字母?

如何拦截转到 Java Swing JTextField 的键盘敲击?