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

时间:2014-09-02 04:14:47

标签: java swing jtextfield keylistener parseint

我尝试使用来自JTextField的输入并将其转换为双倍&n;因为我将在我的程序中使用数学公式中的输入...但是当我尝试运行时代码,它给出了一个错误..我认为我得到了错误的解析方式..任何帮助?谢谢!

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

4 个答案:

答案 0 :(得分:2)

  1. 请勿在文字组件上使用KeyListener,使用DocumentFilter,查看Implementing a Document FilterDocumentFilter Examples了解详情
  2. 您可以改用InputVerifier。有关详细信息,请参阅Validating Input
  3. 您可以使用JFormmattedFieldJSpinner代替。有关详细信息,请参阅How to Use Formatted Text FieldsHow to Use Spinners
  4. 很难说,但请记住,你是在一个事件驱动的环境中运作,直到用户做某事,你不应该试图获得一个字段的值

答案 1 :(得分:0)

使用字符串

上的trim()删除任何可用的空格
   xDouble =  Double.parseDouble(xString.trim());

我假设xString是一个有效的String而xDouble的类型是Double

答案 2 :(得分:0)

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

  

java.lang.Double.parseDouble()方法返回一个新的double   初始化为指定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

答案 3 :(得分: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));
    }

  }
}