2012-06-18 5 views
1

스윙을 사용하여 Java를 배우고 있는데 JTextField을 사용할 때 몇 가지 문제가 있습니다.동적으로 생성 된 JTextFields에서 콘텐츠 가져 오기

while((ln = bufFile.readLine()) != null) { 
    // inIdPanel is JPanel 
    inIdPanel.add(new JTextField(ln)); 
} 

을 그리고 그것은 잘 작동 : 내 프로그램에서 동적으로 텍스트와 JTextFields 몇 가지를 추가하고 싶습니다. 그러나이 JTextFields의 내용은 사용자가 수정할 수 있으며 이후에는 모두 getText()으로 전화를 걸고 싶습니다. 이것이 가능한가? 어떻게해야합니까?

나는이 질문을 보았습니다 : Java Swing: JButton creates new JTextField(s)하지만이게 내 문제를 해결하기에 충분하지 않습니다. (제 생각에는 배열을 사용하는 것이 좋은 생각이 아니지만 어쩌면 내가 잘못 생각한 것 같습니다).

답변

2

getText()을 호출 할 수없는 이유는 작성한 JTextField에 대한 참조를 저장하지 않았기 때문입니다. 나중에 JtextField을 저장하는 경우 array 또는 collection을 사용하여 나중에 해당 메소드를 호출 할 수 있도록해야합니다. collection은 읽을 수있는 줄 수를 모르기 때문에 array보다 쉽습니다.

List<JTextField> fields = new ArrayList<JTTextField>(); 
while((ln = bufFile.readLine()) != null) { 
    JTextField field = new JTextField(ln); 
    inIdPanel.add(field); 
    fields.add(field); 
} 

은 다음 당신은 그들 모두에서

for(JTextField field: fields){ 
    System.out.println(field.getText()); 
} 
+0

고마워요을 .getText()를 호출 할 수 있습니다! :) – nanoo

2

쉬운 솔루션의 경우, 단지 ArrayList<JTextField> textFieldList을 추가하고 게시 된 코드에 추가하면 텍스트 필드를 액세스 할 때

다음
while((ln = bufFile.readLine()) != null) { 
    textFieldList.add(new JTextField(ln)); 
    inIdPanel.add(textFieldList.get(textFieldList.size()-1)); 
} 

, 당신은 단순히 반복, 예를 들어, 거기에 당신이 추가 할 수 있습니다 얼마나 많은 텍스트 필드에 정의 된 제한이지만, 그 양을 알 수없는 경우 목록이 좋은 경우

for (JTextField jtf : textFieldList) { 
    /* Operate on jtf, call methods, etc */ 
} 

당신은 배열로 ArrayList을 대체 할 수 있습니다.

관련 문제