2017-05-30 36 views
0

對於一個學校項目,我正在編寫一個程序,我需要從JTextField中檢索用戶輸入。我試過使用getText()方法,但它返回一個空字符串錯誤。如何訪問JTextField中的用戶輸入?

String s = input.getText(); 
    if(changeNum.equals("")){ 
     firstNum = s; 
    } 
    if(!changeNum.equals("")){ 
     secondNum = s; 
    } 

firstNum和secondNum都是字符串。正在被返回的錯誤是:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String 

它在這一行返回:

Double firstN = Double.parseDouble(firstNum); 

我該怎麼辦?謝謝!

編輯:忘了補充說,輸入是我的JTextField的名稱,萬一是令人困惑。

+0

什麼是'changeNum'? – MadProgrammer

+0

changeNum是一個字符串 –

+0

把觸發你的textField的事件。 – msagala25

回答

0

更改所有可變因素增加一倍(firstNum等),更改您的代碼,如:

注:如果你不使用negatIive數字

double s = null; 
try{ 
     s = Double.parseDouble(input.getText()); 
    }catch(NumberF... e){e.getMesssge();} 
    if(s > 0){ 
     if(changeNum >= 0){ 
       firstNum = s; 
     } 
     else { 
       secondNum = s; 
      } 
} 
    //if you have to convert it to String use : 

String str =String.valueOf(your double variable);

+1

由於在Java 1.4中,'getText'永遠不會返回'null' - 此外,它不是'NullPointerException',它是' NumberFormatException' – MadProgrammer

0

這是怎麼了我喜歡這樣做(一般意義上)。假設我有一個包含三個文本框的面板,並且我想獲取每個面板的值(每個面板代表不同的類型)。這是我會怎麼做:

import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.BoxLayout; 

public class Panel extends JPanel 
{ 
    JTextField   textBox; 
    JTextField   intBox; 
    JTextField   floatBox; 
    JTextField   dblBox; 

    public Panel() 
    { 
    textBox = new JTextField("Hello"); 
    intBox = new JTextField("10"); 
    floatBox = new JTextField("3"); 
    dblBox = new JTextField("3.14");  

    this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 
    this.add(textBox);  
    this.add(intBox); 
    this.add(floatBox); 
    this.add(dblBox); 
    } 

    public String getText() 
    { 
    return textBox.getText(); 
    } 

    public int getInt() 
    { 
    try 
    { 
     return Integer.parseInt(intBox.getText()); 
    } 
    catch(NumberFormatException execp) { } 
    return -1; 
    } 

    public float getFloat() 
    { 
    try 
    { 
     return Float.parseFloat(floatBox.getText()); 
    } 
    catch(NumberFormatException execp) { } 
    return -2.0f; 
    } 

    public double getDouble() 
    { 
    try 
    { 
     return Double.parseDouble(dblBox.getText()); 
    } 
    catch(NumberFormatException execp) { } 
    return -2.0; 
    } 
} 

另一種選擇是讓Panel實現ActionListener,並dblBox.addActionListener(this)。然後,無論何時更改編號,解析數據,並在JLabel中寫入錯誤消息(如果投射拋出異常),或者在私有成員成功後,您都可以讓JTextField從父母調用方法。然後使用getters讀取私有成員。

+0

問題所有者需要將字符串更改爲'Double'而不是'int'或'float'。 –