2015-10-19 52 views
1

假設我有3周的TextField - 用於供用戶輸入值代入(在程序運行時):查找異常呼叫者和修改,以顯示一個值

TextField input1 = new JTextField("00"); 
TextField input2 = new JTextField("00"); 
TextField input3 = new JTextField("00"); 

當用戶輸入值,程序則需要(以後用於操作)這些值並將它們存儲爲整數:

public void actionPerformed(ActionEvent e) { 

    String temp1 = input1.getText(); 
    String temp2 = input.getText(); 
    String temp3 = input3.getText(); 

    int num1=0, num2=0, num3=0; 
    if(e.getSource() == storeButton){ 
     try{ 
      num1 = Integer.parseInt(tem1); 
      num2 = Integer.parseInt(temp2); 
      num3 = Integer.parseInt(temp3); 
     } 
     catch(NumberFormatException ex){ 
      JOptionPane.showMessageDialog(null, "Input must be an integer from 0 to 50"); 
     } 
    } 
} 

作爲上述代碼所示,當用戶點擊storeButton在TextField的值被解析成特定變量爲整數,並且如果任何TextFields除包含整數外還包含一個輸入,則會彈出一條消息。

問題:

當異常被調用時,如何清除(設置爲「0」)的文本字段不包含數字? 不能清除包含整數的TextField。 我可以通過使用嘗試捕獲爲每個TextField解析爲整數,但這將意味着代碼(尤其是當有很多TextFields)時重複太多。

+0

將每個輸入傳遞給檢查輸入的方法。嘗試/抓住一個地方,你知道哪一個失敗了。簡單的重構,可以走得更遠。 –

+0

*'NumberFormatException..' *爲什麼使用戶接受這個?而是使用'SpinnerNumberModel'爲他們提供'JSpinner',並且它永遠不會出現。 –

+0

我不能說,但它是作業中的一項要求。我知道還有其他方法,其中一些更高效,但它是一項要求:) – NewToCoding

回答

1

看看Character.isDigit()。你可以創建一個循環遍歷每個字符串的子方法,並檢查它是否是一個數字。 或者,您可以在字符串上使用正則表達式來檢查它是否是數字。 這可以讓你擺脫try/catch並用if/else處理它們。

+0

該任務需要使用異常處理程序。我用一串字符串(每個字符串包含特定的TextField數據)實現匹配(正則表達式)。當調用異常時,如果在for循環中使用語句,其中每個字符串都與正則表達式進行比較,並且如果它不匹配,則關聯的TextField文本將設置爲「0」。你的回覆有助於我在腦海中建立這個想法,我會接受它作爲回答:) – NewToCoding

+0

謝謝,那是我的目標。我認爲你通過嘗試而不是看預先寫好的答案來學習更多。現在你已經有了答案,如果你想看一些我如何編寫代碼的例子,我很樂意將它移到聊天中。 –

+0

那很好。我不是專家,但我確信有比我的實施更有效的方法。 :)而且,不客氣。 – NewToCoding