Pegar o conteúdo de um componente que não conheço o nome?

Olá pessoal, tenho uma dúvida: Tenho um for que cria 3 caixas de JTextField.

String[] labels = {"Nome: ", "Fax: ", "Email: "};
int numPairs = labels.length;

JPanel p = new JPanel(new FlowLayout());
for (int i = 0; i < numPairs; i++) {
   JLabel l = new JLabel(labels[i], JLabel.TRAILING);
   p.add(l);
   JTextField textField = new JTextField(10);
   l.setLabelFor(textField);
   p.add(textField);
}

Muito bem. Agora preciso pegar o conteúdo dos 3 JTextFields e mostrar em System.out.println("Nome: “+???+” Fax: “+???+” Email: "+???);
A pergunta é: Como os componentes foram criados todos com o nome textField dentro do for, como vou saber quem é quem e seus respectivos nomes?

Agradeço antecipadamente pela ajuda! Fico no aguardo.

Você pode armazenar seu componentes num HashMap, onde o JLabel será a chave e o JTextField o valor. Depois é só percorrer o HashMap e fazer seu processamento específico.

Uma forma mais fácil é criar um array de JTextField e acessar os conteudos pelo indice.
Ex:

1. String[] labels = {"Nome: ", "Fax: ", "Email: "}; 2. int numPairs = labels.length; 3. JTextField campos[] = new JTextField[numPairs]; 4. JPanel p = new JPanel(new FlowLayout()); 5. for (int i = 0; i < numPairs; i++) { 6. JLabel l = new JLabel(labels[i], JLabel.TRAILING); 7. p.add(l); 8. campos[i] = new JTextField(10); 9. l.setLabelFor(campos); 10. p.add(campos[i]); 11. }

Legal, ambas as formas apresentadas resolvem o problema no desenvolvimento mas geram problemas com a modelagem (Diagrama de Classes).
No 1º exemplo os atributos da classe viraram chaves (key) do HashMap.
No 2º exemplo os atributos da classe viraram dados no Vetor campos[].

Existe solução para isso?

Nem uma idéia, ninguém mesmo?

Bom…
Eu usaria a segunda forma…
Maaaassss… Se não for adequada para suas necessidades, é possível acessar os objetos do JPanel…

Mais ou menos assim:

JPanel p = new JPanel(new FlowLayout()); Component[] components = p.getComponents(); for (Component c : components) { if (c instanceof JTextField) { if (((JTextField)c).getName().equalsIgnoreCase("NOME DESEJADO")) { //ACHOU!!! } } }

Talvez isso resolva o problema… Talvez… Não tenho certeza de como funciona o sistema…
Para este caso acho que resolve…

Mas dependendo do LayoutManager escolhido, você deve adicionar os objetos NO Layout, e não JPainel…
Logo, isso não funciona para todo Layout acho…