【问题标题】:How can I convert input from JTextField into double. Input value is from user如何将来自 JTextField 的输入转换为双精度。输入值来自用户
【发布时间】:2014-10-26 06:25:53
【问题描述】:

我正在尝试使用来自 JTextField 的输入并将其转换为 double '因为我将在我的程序中使用数学公式中的输入.. 但是当我尝试运行代码时,它会给出错误。 .我想我的解析方式错误..有什么帮助吗?谢谢!

    xLabel = new JLabel("Subject");
    xTF = new JTextField(4);
    xTF.addKeyListener(new KeyHandler());
    xString = xTF.getText();
    xDouble = Double.parseDouble(xString);

【问题讨论】:

  • 您的代码示例表明可能对 Swing(以及一般的 GUI 环境)的工作方式存在误解,请考虑提供 runnable example 来证明您的问题。这将导致更少的混乱和更好的响应
  • 你在文本字段中输入什么类型的字符串,它是否只包含像 12345 或 12ASDA 这样的数字,你得到 java.lang.NumberFormatException

标签: java swing jtextfield keylistener parseint


【解决方案1】:
  1. 不要在文本组件上使用KeyListener,使用DocumentFilter,查看Implementing a Document Filter 和DocumentFilter Examples 了解更多详情
  2. 您可以改用InputVerifier。详情请见Validating Input
  3. 您可以改用JFormmattedField 或JSpinner。请参阅How to Use Formatted Text Fields 和How to Use Spinners 了解更多详情

很难说,但请记住,您是在事件驱动的环境中操作,在用户执行某项操作之前,您不应该尝试获取字段的值

【讨论】:

    【解决方案2】:

    在字符串上使用 trim() 删除任何可用的空格

       xDouble =  Double.parseDouble(xString.trim());
    

    我假设 xString 是一个有效的字符串,而 xDouble 是 Double 类型

    【讨论】:

      【解决方案3】:

      你应该使用parseDouble(String s),相关的异常是NumberFormatException

      java.lang.Double.parseDouble() 方法返回一个新的双精度 初始化为指定 String 所表示的值,如 done 通过 Double 类的 valueOf 方法。

      例如:

      public class Main {
         public static void main(String[] args) {
           String str = "50.00001";
           double retval =Double.parseDouble(str);
           System.out.println("Value = " + retval);
         }
      }
      
      1. how to convert String to Double
      2. Source for sample code
      3. Source for Paragraph

      【讨论】:

        【解决方案4】:

        看起来不错,您在测试之前是否在文本字段中输入了正确的值?例如,如果您将其留空或输入“1,3”,它可能不会接受它。

        已编辑:我刚刚做了一个测试,正如我所说,它只接受这样的值:“1.3”

        import java.awt.BorderLayout;
        import java.awt.event.ActionEvent;
        import java.awt.event.ActionListener;
        
        import javax.swing.JButton;
        import javax.swing.JFrame;
        import javax.swing.JLabel;
        import javax.swing.JTextField;
        
        
        public class MyApp extends JFrame implements ActionListener {
        
        JTextField textField;
        JLabel label;
        JButton okButton;
        
        public MyApp() {
            textField = new JTextField(4);
            label = new JLabel("N/A");
            okButton = new JButton("Ok");
        
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setLocationRelativeTo(null);
            setLayout(new BorderLayout());
        
            add(textField, BorderLayout.NORTH);
            add(label, BorderLayout.CENTER);
            add(okButton, BorderLayout.SOUTH);
            okButton.addActionListener(this);
        
        
            pack();
        
        }
        
        public static void main(String[] args) {
            MyApp app = new MyApp();
        
            app.setVisible(true);
        }
        
        @Override
        public void actionPerformed(ActionEvent e) {
            if(e.getSource() == okButton) {
                double d = 0;
                d = Double.parseDouble(textField.getText());
                label.setText(String.valueOf(d));
            }
        
          }
        }
        

        【讨论】:

        • 只是友好的建议,我知道你确实有足够的声誉,但这不是答案。
        • 我的目标是帮助不要得到一些愚蠢的分数。我只是做了一个测试,以确保我说的是对的..
        • 我不是故意让你不高兴,请不要私信。我只是指出了这个网站的一个规则,但如果你认为这是一个答案,我可以。您可以添加更多信息并格式化您的帖子,这样您就有更好的机会获得投票,祝您好运:)
        • 你忘记格式化你的最后一个 } 。有些人喜欢投反对票,我喜欢有礼貌:)
        • 是的,已修复。我希望“我们”有所帮助。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-10
        相关资源
        最近更新 更多