2015-06-21 28 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:您的布爾邏輯已關閉。再次,寫下紙上的邏輯,逐步理解你的想法,然後你就會發現它。 –