2011-10-23 30 views
1

我試圖從文本字段(由用戶輸入)獲取值用於處理。但不管我做什麼,它都不會得到進入它的價值似乎仍然是空的。有人可以告訴我爲什麼它不會從文本字段中獲得價值。爲什麼我的Java代碼不能獲取JText字段的值?

這是initialy創建並命名爲writeStrings

public void chooseEmpToAdd() 
{ 
    JTextArea EmpDetails = new JTextArea(5,20); 
    JTextField writeStrings = new JTextField(20); 
    JLabel enterIDno = new JLabel("Please enter The Employye ID number that you wish to assign to a department: "); 

    JButton submit = new JButton (" Submit") ; 
     ButtonListenerEmp Listener2 = new ButtonListenerEmp(); 
     submit.addActionListener(Listener2); 
    JFrame frameAllEmps = new JFrame(); 
     frameAllEmps.setSize(150, 140); 
    frameAllEmps.pack(); 
    frameAllEmps.setVisible(true); 

    //layout 
    frameAllEmps.setLayout(new FlowLayout()); 
     frameAllEmps.add(enterIDno); 

    int x = 0; 
    System.out.println("ALL Emps from the tree map"); 
    for(int key:employeeMap.keySet()) 
    { 

     Employee dEmp = employeeMap.get(key); 
     System.out.println("Employe no :" +x+": "+dEmp); 
     EmpDetails.setText(EmpDetails.getText()+" "+dEmp); 
     frameAllEmps.add(EmpDetails); 
     x++; 
    } 

    frameAllEmps.add(new JScrollPane(EmpDetails)); 
    frameAllEmps.add(writeStrings); 
    frameAllEmps.add(submit); 
    frameAllEmps.pack(); 

} 

這是動作監聽者應該從文本框中取值,並將其打印到控制檯的文本字段的方法,但它確實不行。

private class ButtonListenerEmp implements ActionListener 
    { 
     public void actionPerformed (ActionEvent e) 
     { 
      String ID ; 
      int dID; 


       ID = writeStrings.getText(); 
       System.out.println("start of try b4 changes: "+ID);  
       } 
      } 
+0

這個問題很容易在代碼中沒有顯示。爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –

+0

請學習java命名約定並堅持使用它們 – kleopatra

回答

3

的監聽器實現不應該訪問局部變量writeStrings,我甚至不知道如何將編譯 - 是您發佈準確的代碼?

哦,你可能有兩個局部變量writeStrings一個變量writeStrings例如,儘管這很難說,因爲你沒有張貼代碼的其餘部分。儘量不要在chooseEmpToAdd方法中聲明writeStrings;改用類變量。

+0

Hi Dave感謝您的聯繫。是的代碼編譯好。如果我把所有東西放在一起,它們將會代碼太多。 什麼是類變量是什麼時候textField在類的開始時聲明wrire – Binyomin

+0

@Binyomin是的,雖然我的意思是實例變量。 –

+0

是的!你是正確的謝謝,它現在有效 – Binyomin

2

因爲您聲明文本字段爲chooseEmpToAdd方法的局部變量,所以它不被ButtonListenerEmp類所看到。要解決此問題,請將文本字段聲明爲類字段並將其公開或將文本字段的文本作爲ButtonListenerEmp構造函數的參數傳遞。這使我想起從提供的代碼

0

的一件事是你創建新的JTextField並將其存儲在一個名爲writeStrings一個本地變量也許這是不是你嘗試從lateron讀取相同。

2

可變ID可能沒有被初始化(即String ID = "";

也有是在該行writeStrings.getText()編譯錯誤,因爲變量writeStrings不將chooseEmpToAdd()方法之外存在。改爲在方法之前嘗試聲明JTextField writeStrings = new JTextField(20);

+0

是的!你是正確的謝謝,它現在可以工作 – Binyomin

+0

ID立即分配,它沒有被分配之前使用 - 並非所有的IDE警告是有用的。另外,OP指出文本字段的值始終爲空,所以顯然不存在編譯錯誤,這就是我們如何診斷實例變量被方法的本地聲明遮蔽的方式。 –

相關問題