2015-06-21 29 views
0

我有三个JTextfields称为vol1HH1,vol1HH2,vol1HH3和fvol。其结果在actionPerformed事件之后输出。空的JTextField和添加号码

用户可能只是输入一个数字到vol1HH1和vol1HH2但不是vol1HH3,我将如何确保这两个数字被添加并且结果显示到fvol而不会导致空的JTextField vol1HH3出现数字处理错误?

public void actionPerformed(ActionEvent e) { 
double number1 = Double.parseDouble(vol1HH1.getText()); 
double number2 = Double.parseDouble(vol1HH2.getText()); 
double number3 = Double.parseDouble(vol1HH3.getText()); 

fvol.setText(Double.toString(number1 + number2 + number3)); 
} 

我试过这个,但这似乎并不奏效,我做错了什么?

double sum = 0; 

if (!vol1HH1.getText().trim().isEmpty()||!vol1HH2.getText().trim().isEmpty()){ 
    // only now parse the text and add it 
    sum += Double.parseDouble(vol1HH1.getText()); 
    sum += Double.parseDouble(vol1HH2.getText()); 
} 


fvol.setText(Double.toString(sum)); 
+0

请澄清,'“但这似乎不起作用”。 –

+0

也通过您的程序逻辑在纸上。逻辑问题如'||'和NOT运算符在没有我们帮助的情况下应由您解决。我相信你可以解决这个问题。 –

+0

考虑使用可以执行自己的验证的'JSpinner'或'JFormattedField'。请参阅[如何使用Spinners](http://docs.oracle.com/javase/tutorial/uiswing/components/spinner.html)和[如何使用带格式的文本字段](http://docs.oracle.com/ javase/tutorial/uiswing/components/formattedtextfield.html)更多详情 – MadProgrammer

回答

1

为了避免将空字符串到Double.parseDouble()方法,为什么不你使用条件运算符?

可能是类似 double number3 = Double.parseDouble(vol1HH3.getText().equals("") ? "0" : vol1HH3.getText());会帮助你解决我猜的问题。

无论何时该字段为空vol1HH3.getText()返回一个空字符串,并在那时传递0将完成工作,并不会影响您的总和。

+0

非常感谢 – Ingram

2
  1. 确保只有数字可以被添加到您的JTextField的 - 某个DocumentFilter添加到JTextField的文件将为这项工作做得很好。欲了解更多信息,请参阅my answer to a similar question
  2. 测试此JTextField是空以前试图通过使用简单的,如果块的解析它:

if (!myTextField.getText().trim().isEmpty()) { 
    // only now parse the text and add it 
    sum += Double.parseDouble(myTextField.getText()); 
} 
+0

@MrAssistance:住我的眼睛。请避免尝试在注释中发布代码,除非您发布单行代码的片段。相反,如果您需要向我们提供更多代码进行审阅,请编辑原始问题并在问题的底部添加任何新代码。关于'''会不会有这样的工作?“最好的办法是试试看。 –

+0

在问题底部查看新代码 – Ingram

+0

@MrAssistance:您的布尔逻辑已关闭。再次,写下纸上的逻辑,逐步理解你的想法,然后你就会发现它。 –