Componentes,arrays e loops juntos

Boa noite pessoal. O código abaixo não vai gerar 4 JTextFields, certo?

Qual é o meu erro de lógica?

private JTextField[] caixas = new JTextField[5];


for (int i=0,a=15,b=30,c=30,d=30;i<5;i++,a+=45){
caixas[i] = new JTextField();
caixas[i].setBounds(a,b,c,d);
getContentPane().add(caixas[i]);
}

Só pra eu entender como trabalhar com componentes usando array e loops for.

Obrigado.

Carinha, isso não é todo o seu código, é? Se isto for um pedacinho de um código de um JFrame, talvez funcione… De qualquer forma, tá feio pra cacete…

Porque colocar 5 variáveis na inicialização se você não utiliza todas? Isto só polui o código.

Convém lembrar que, embora as linguagens de programação deixe você fazer muitas coisas malucas, muitas vezes elas prejudicam a legibilidade do código. E baixa legibilidade implica em aplicação morta, em pouco tempo, pois aplicação que não pode ser mantida acaba sendo substituída…

Mas você executa aparece algum erro :?: Não cheguei executar, mas olhando por cima, pude ver variáveis desnecessárias (b, c e d) dentro do loop, podendo otimizar assim:

private JTextField[] caixas = new JTextField[5];  

byte b=30,c=30,d=30;
for (byte i=0,a=15;i&lt;5;i++,a+=45){  
      caixas[i] = new JTextField();  
      caixas[i].setBounds(a,b,c,d);  
      getContentPane().add(caixas[i]);  
}  

Você está usando no seu projeto as variáveis b, c, d em algum outro método ou muda os valores delas? Elas são meio inuteis, o código podia ficar assim:

private JTextField[] caixas = new JTextField[5];       
   
for (byte i=0,a=15;i<5;i++,a+=45){     
      caixas[i] = new JTextField();     
      caixas[i].setBounds(a,30,30,30);     
      getContentPane().add(caixas[i]);     
}  

Tudo bem gente, convenções aceitas de bom grado. Sério mesmo. Mas o foco não é esse. Onde estou não tem Eclipse, mas eu executei esse código ontem em casa, e ele só gerou um JTextField. O problema aqui é a lógica do loop. Com relação as variáveis, um array com posições a mais, eu entendo, mas o foco não é esse, até porque eu fiz correndo.

O problema não é o código desnecessário, o problema é simplesmente que o loop não cria as demais caixas de texto, independente de eu ter criado as variáveis b,c ou d ou colocado posições que não utilizarei no meu array.

Se nem você testou seu código fica difícil…

Não tenho sua classe completa e não dá para testar só este pedacinho (mesmo se eu quiser-se)…

Enfim, pode ser seu gerenciador de layout e por isto os JTextField estão um em cima do outro.

O jeito seria pasando o código ocmpleto para testar talvez assim eu descubra o erro

Errado. Ele vai gerar 5.

Nenhum.

Mas para usar o setBounds, você deve ter feito setLayout(null); no painel que está recebendo esses componentes, certo?