2011-10-23 2 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

자바 명명 규칙을 배우고 그들에게 붙이십시오. – kleopatra

답변

3

리스너 구현은 지역 변수 writeStrings에 액세스 할 수 있어야, 그 컴파일 얼마나 모르겠어요 - 당신이 정확한 게시 된 코드는? 당신이 코드의 나머지 부분을 게시하지 않았기 때문에 말하기 어렵다하지만

오, 당신은 아마, writeStrings 변수 지역 변수 writeStrings, 인스턴스를 모두 가지고있다. chooseEmpToAdd 메서드에서 writeStrings을 선언하지 마십시오. 클래스 변수를 대신 사용하십시오.

+0

안녕하세요, Dave에게 연락해 주셔서 감사합니다. 네, 코드가 정상적으로 컴파일됩니다. 만약 내가 전체를 많이 넣으면 그들은 훨씬 더 많은 코드를 작성할 것이다. 클래스 변수는 textField가 클래스 – Binyomin

+0

@ Beinyomin의 시작으로 선언되었을 때입니다. 예를 들어 인스턴스 변수를 의미 하긴하지만 그렇습니다. –

+0

예! 당신은 올바른 고마워요, 지금 작동 – Binyomin

2

텍스트 필드를 chooseEmpToAdd 메서드의 로컬 변수로 선언 했으므로 ButtonListenerEmp 클래스에서 볼 수 없습니다. 이 문제를 해결하려면 텍스트 필드를 클래스 필드로 선언하고 public으로 만들거나 텍스트 필드의 텍스트를 ButtonListenerEmp 생성자의 인수로 전달하십시오. 제시된 코드에서 내 마음에 오는

0

한 것은 당신이 어쩌면 당신이 lateron에서 읽으려고 동일하지 않습니다 새로운 JTextField을 만들고 writeStrings라는 지역 변수에 저장한다는 것입니다.

2

변수 ID가 초기화되지 않았 (즉 String ID = "";) 가변 writeStringschooseEmpToAdd() 방법 밖에 존재하지 않기 때문에

또한 라인 writeStrings.getText()에서 컴파일 오류가있다. 대신 메서드 앞에 JTextField writeStrings = new JTextField(20);을 선언 해보십시오.

+0

예! 당신은 올바른 고마워요. 지금은 – Binyomin

+0

ID가 즉시 할당되고 할당되기 전에 사용되지 않습니다. 모든 IDE 경고가 유용하지는 않습니다. 또한 OP에는 텍스트 필드의 값이 항상 비어 있으므로 컴파일 오류가 명확하지 않으므로 메서드의 로컬 선언에 의해 섀도 잉되는 인스턴스 변수가 있다고 진단 할 수 있습니다. –

관련 문제