2014-09-02 112 views
0

我想使用来自JTextField的输入,并将其变成双'因为我会在我的程序中使用数学公式中的输入..但是当我尝试运行代码时,它给出一个错误..我想我得到了错误的解析方式..任何帮助?谢谢!如何将输入从JTextField转换为double。输入值来自用户

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

你的代码示例说明的摇摆(和GUI环境一般)是如何工作的,考虑提供一个[可运行示例](https://stackoverflow.com/help/mcve),这表明你的问题可能的误解。这将导致更少的混乱和更好的反应 – MadProgrammer 2014-09-02 04:26:23

+0

您在文本字段中输入的内容类型的字符串,它包含数字只有12345或12ASDA,是U越来越java.lang.NumberFormatException – mussdroid 2014-09-02 07:53:44

回答

0

通过在字符串中使用TRIM()可以删除任何空白

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

如果我假设xString是一个有效的字符串和xDouble是Double类型

0

您应该使用parseDouble(String s)与此相关的例外是NumberFormatException

java.lang.Double.parseDouble()方法返回一个新的双精度型 ,初始化为由指定String表示的值,如由类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
0

这看起来不错,你在正确的价值观在你的文本框,你测试前输入它?举例来说,如果你把它留空或键入“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)); 
    } 

    } 
} 
+2

只是友好的建议,我知道你做小额已足够的声誉,但这不是一个答案。 – 2014-09-02 04:26:45

+0

我的目标是帮助不要得到一些愚蠢的观点。我只是做了一个测试,以确保我说的是正确的。 – Anas 2014-09-02 04:33:04

+0

我不是故意让你不高兴,请不要个人。我只是指出了这个网站的一个规则,但如果你认为这是一个答案,那对我来说很好。你可以添加更多的信息和格式化你的文章,所以你可以有更好的机会投票祝你好运:) – 2014-09-02 04:34:30

2
  1. 不要在文本组件使用KeyListener,使用DocumentFilter,采取请查看Implementing a Document FilterDocumentFilter Examples以了解更多详情
  2. 您可以改用InputVerifier。有关更多详细信息,请参见Validating Input
  3. 您可以改用JFormmattedFieldJSpinner。详情参见How to Use Formatted Text FieldsHow to Use Spinners

这很难说,但要记住,你是在一个事件驱动的环境中运行,直到用户做一些事情,你不应该试图让一个场

的价值
相关问题