Limpando jtextfield

Boa Tarde pessoal!!

Estou com a seguinte dúvida

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 “”

grato

Cara uma dica pra te ajudar um pouco seria você dar uma olhada na paleta “inspector” do netbenas…
ela tem uma arvore que mostra todos os componentes…

quando vc chama esse metodo?


http://www.guj.com.br/posts/list/98525.java

 private void btnNovoActionPerformed(java.awt.event.ActionEvent evt) {
        limpaComponentes(pnlDados);
        btnSalvar.setText("Incluir");
        tpPrincipal.setSelectedIndex(1);
        txtDescricao.requestFocus();
    }


Que tal isso:

	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);
			}
		}
	}

E para usar:

clearAllTextComponents(getContetPane());

Certo?

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…

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). :wink:

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); }

Você tá pegando os objetos no conteiner certo??Não seria do objeto JPanel?

[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. :slight_smile:

Você pode passar qualquer Container para o método (inclusive objetos do tipo JPanel, que estendem Container também).

valeu pessoal, funcionou do jeito que eu precisava