peguei o seguinte código para fazer um método que limpasse todos jtextfield no meu formulário
publicvoidlimpaComponentes(JPanelobj){for(inti=0;i<getContentPane().getComponentCount();i++){Componentc=getContentPane().getComponent(i);System.out.println(c.getName());//coloquei essa linha para ir pegando o nome dos componentes e fazer o testeif(cinstanceofJTextField){JTextFieldfield=(JTextField)c;field.setText("");}}}
o código retornou apenas os botões, não retornando os jTextfield
Segue então a pergunta tosca, já que não vejo erros no código acima:
Estou usando o netbeans e arrastando os jtextfield para dentro do jpanel, como não vejo o código que monta esses componentes, pergunto, meus jtextfield estão sendo adicionados ao jpanel??
agradeço qualquer dica, já que meu formulário deve ter uns 20 jtextfield, acredito que deve haver uma forma mais simples do que setar o text de todos para “”
publicstaticvoidclearAllTextComponents(finalContainertarget){if(target==null){thrownewIllegalArgumentException("The target container can not be null.");}for(finalComponentcomp:target.getComponents()){if(compinstanceofJTextComponent){((JTextComponent)comp).setText("");continue;}if(compinstanceofContainer){clearAllTextComponents((Container)comp);}}}
E para usar:
clearAllTextComponents(getContetPane());
Certo?
Lavieri
so 1 duvia marco… pra q o continue na linha 9 ??
eu tinha pensando na mesma solução q o c ^^ mas c postou antes… so não si o pq do continue…
M
marcobiscaro2112
O continue interrompe aquela repetição passando para próxima. O porque? Acontece que a classe JTextComponent estende indiretamente Container. Logo, se eu não usasse o continue, as duas condições seriam verdadeiras, e eu usaria a recursividade dentro de todos os componentes de texto, o que é desnecessário (afinal, é bastante incomum colocar um JTextField dentro de outro).
Lavieri
podia ser um else =x no lugar do continue =x … mas bom saber
public static void clearAllTextComponents(final Container target) {
if (target == null)
throw new IllegalArgumentException(
"The target container can not be null.");
for (final Component comp : target.getComponents())
if (comp instanceof JTextComponent)
((JTextComponent) comp).setText("");
else if (comp instanceof Container)
clearAllTextComponents((Container) comp);
}
M
mrsmylle
Você tá pegando os objetos no conteiner certo??Não seria do objeto JPanel?
M
marcobiscaro2112
Lavieri:
podia ser um else =x no lugar do continue =x … mas bom saber
public static void clearAllTextComponents(final Container target) {
if (target == null)
throw new IllegalArgumentException(
"The target container can not be null.");
for (final Component comp : target.getComponents())
if (comp instanceof JTextComponent)
((JTextComponent) comp).setText("");
else if (comp instanceof Container)
clearAllTextComponents((Container) comp);
}
Realmente, poderia ser o else. Nesse caso vai dar na mesma. De qualquer forma, ficam aí os dois modos.
M
marcobiscaro2112
Você pode passar qualquer Container para o método (inclusive objetos do tipo JPanel, que estendem Container também).
marceloamigo
valeu pessoal, funcionou do jeito que eu precisava