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…