Java 如何将输入从JTextField转换为double。输入值来自用户

Java 如何将输入从JTextField转换为double。输入值来自用户,java,swing,jtextfield,keylistener,parseint,Java,Swing,Jtextfield,Keylistener,Parseint,我试图使用来自JTextField的输入,并将其转换为double'z,因为我将在我的程序中使用数学公式中的输入。。但是当我试着运行代码时,它给出了一个错误。。我想我用错了解析的方法。。有什么帮助吗?谢谢 xLabel = new JLabel("Subject"); xTF = new JTextField(4); xTF.addKeyListener(new KeyHandler()); xString = xTF.getText(); xDouble

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

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

使用字符串上的trim()删除所有可用的空白

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

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

您应该使用
parseDouble(strings)
,与之相关的异常是
NumberFormatException

java.lang.Double.parseDouble()方法返回一个新的Double 初始化为指定字符串表示的值,如所做 通过类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,3”,它可能不会接受它

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

  • 不要在文本组件上使用
    KeyListener
    ,请使用
    DocumentFilter
    ,查看和了解更多详细信息
  • 您可以使用
    输入验证程序
    。有关更多详细信息,请参阅
  • 您可以使用
    JFormmattedField
    JSpinner
    。有关详细信息,请参阅和

  • 很难说清楚,但是记住,你在一个事件驱动的环境中运行,直到用户做了某件事,你不应该试图获得一个字段

    的值。你的代码示例暗示了Swing(和GUI环境一般)如何工作的一个可能的误解,考虑提供一个演示你的问题的方法。这将减少混乱和更好的响应您在文本字段中输入的字符串类型,它是否只包含像12345或12ASDA这样的数字,您是否得到java.lang.NumberFormatException只是一个友好的建议,我知道您的声誉很好,但这不是一个答案。我的目标是帮助您不要得到一些愚蠢的分数。我只是做了一个测试,以确保我说的是正确的。我不是有意让你不高兴,请不要采取私人行动。我刚刚指出了这个网站的一条规则,但如果你认为这是一个答案,我没意见。你可以添加更多信息并格式化你的帖子,这样你就有更好的机会获得投票。祝你好运:)你忘了格式化上一篇}。有些人喜欢投反对票,而我喜欢有礼貌:)是的,修正了。我希望“我们”能帮上忙。
    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));
        }
    
      }
    }