Nome de um componente definido por uma String

6 respostas
A
Olá, estou desenvolvendo um aplicativo que, em determinado momento, cria X componentes (sempre é variável (não definido)) na janela. Estou criando com o seguite código:
while(quantidades <= a1.quantosCamposInt) {
    
JLabel nomeLabel1 = new JLabel("Nome: ");
final JTextField campo1 = new JTextField(10); 
nomeLabel1.setLabelFor(campo1);
    
panelReconheInformacoes.add (nomeLabel1);
panelReconheInformacoes.add (campo1);

quantidades = quantidades + 1;

}
O código está funcionando perfeitamente, o problema é que ao executar, ele cria todas as labels com o nome "nomeLabel1" e todos os campos de texto com o nome "campo1". Eu gostaria de mudar o nome desses componentes a cada nova execução do while, ex: Se o while anterior criou:
JLabel nomeLabel1 = new JLabel("Nome: "); final JTextField campo1 = new JTextField(10);
Agora ele deveria criar:
JLabel nomeLabel2 = new JLabel("Nome: "); final JTextField campo2 = new JTextField(10);
Tentei usar strings para isso, mas não deu certo. O Java não aceita. Alguém conhece alguma maneira para que eu possa ir trocando os nomes dos componentes?

Preciso muito disso, pois, digamos que a janela tenha 20 componentes com o mesmo nome, se eu tentar adquirir o valor do "campo1" por exemplo, qual dos 20 ele vai pegar?

Posso até estar falando besteira mas, acredito que o Java mude o nome de campos que possuam o mesmo nome que outros. Se isso for verdade, será que poderiam me dizer como ficaria o nome de um campo que o Java modificou?
Acredito que seja + ou ? isso:

Criado pelo usuário: Campo1
Modificado pelo Java: Campo11

Tentei adquirir o valor do campo "Campo11" em minha janela mas deu erro. Provavelmente não vai ser tão óbvio o resultado, mas tem que ter uma lógica.

OBS: Desculpa aew pelo texto grande, é que estou meio preocupado. Se eu não descobrir como diferenciar os componentes acima, o projeto vai praticamente para a Lixeira.

Antes de tudo, muito obrigado!

6 Respostas

andreiribas

Use o método setName(String name) da classe Component.

Assim, você consegue pegar todos os compoenentes e diferenciálos pelo nome.

A

Valeu pela dica mas, como eu defino que é o jTextField1 que tem o Name “campo24” que eu quero?
Tipo, tentei fazer adaptando o:
jTextField1.getText();

só que não funciona. Será que vc poderia me dar um exemplo, pois encontrei muito pouco no Javadoc:
http://java.sun.com/javase/6/docs/api/java/awt/Component.html#setName(java.lang.String)

vlw

andreiribas
while(quantidades <= a1.quantosCamposInt) {  

   JLabel nomeLabel = new JLabel("Nome: ");  
   final JTextField campo = new JTextField(10);
   campo.setName("Campo" + quantidades);
   nomeLabel1.setLabelFor(campo);  

   panelReconheInformacoes.add (nomeLabel);  
   panelReconheInformacoes.add (campo);  

   quantidades = quantidades + 1;  

}
Marky.Vasconcelos

Ou entao usar um Map<String, JTextField>.

A
andreiribas:
while(quantidades <= a1.quantosCamposInt) {  

   JLabel nomeLabel = new JLabel("Nome: ");  
   final JTextField campo = new JTextField(10);
   campo.setName("Campo" + quantidades);
   nomeLabel1.setLabelFor(campo);  

   panelReconheInformacoes.add (nomeLabel);  
   panelReconheInformacoes.add (campo);  

   quantidades = quantidades + 1;  

}
Não não amigo, essa parte (criar um Name para o componente) eu já havia conseguido sem problemas. O que estou com dúvida é como adquirir o valor (ou identificar) o componente. Ao utilizar normalmente (sem Name) eu faria:
campoTexto.getText();
Ou seja, se eu precisasse adquirir o valor do "campo" (já com Name) criado abaixo, como eu faria?
final JTextField campo = new JTextField(10);  
campo.setName("Campo" + quantidades);

vlw

A

será que rola um exemplo?

vlw

Criado 9 de setembro de 2009
Ultima resposta 11 de set. de 2009
Respostas 6
Participantes 3