我尝试使用来自JTextField的输入并将其转换为双倍&n;因为我将在我的程序中使用数学公式中的输入...但是当我尝试运行时代码,它给出了一个错误..我认为我得到了错误的解析方式..任何帮助?谢谢!
xLabel = new JLabel("Subject");
xTF = new JTextField(4);
xTF.addKeyListener(new KeyHandler());
xString = xTF.getText();
xDouble = Double.parseDouble(xString);
答案 0 :(得分:2)
KeyListener
,使用DocumentFilter
,查看Implementing a Document Filter和DocumentFilter Examples了解详情InputVerifier
。有关详细信息,请参阅Validating Input JFormmattedField
或JSpinner
代替。有关详细信息,请参阅How to Use Formatted Text Fields和How to Use Spinners 很难说,但请记住,你是在一个事件驱动的环境中运作,直到用户做某事,你不应该试图获得一个字段的值
答案 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);
}
}
答案 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));
}
}
}