peguei o seguinte código para fazer um método que limpasse todos jtextfield no meu formulário
public void limpaComponentes(JPanel obj) {
for (int i = 0; i < getContentPane().getComponentCount(); i++) {
Component c = getContentPane().getComponent(i);
System.out.println(c.getName()); //coloquei essa linha para ir pegando o nome dos componentes e fazer o teste
if (c instanceof JTextField) {
JTextField field = (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 “”
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("");
continue;
}
if (comp instanceof Container) {
clearAllTextComponents((Container) comp);
}
}
}
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).
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);
}
[quote=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);
}
[/quote]
Realmente, poderia ser o else. Nesse caso vai dar na mesma. De qualquer forma, ficam aí os dois modos.