Metodo para limpar todos os campos de JTextField

17 respostas
khaue_viana_

Pessoal estou tentando criar um metodo para limpar todos os campos JTextField de um JFrame. Li todos os topicos do forum e nenhum me ajudou. Se alguem puder me ajudar agradeço!

Tenho tentado assim

public void limparCampos(Container container)

{

Component components[] = container.getComponents();
for (Component component : components)

{

if (component instanceof JTextField)

{

((JTextField)component).setText(null);

}

}

}

Abraço

17 Respostas

Anime

Oi khaue,

private void limpar()
{
  
     JTextField.setText("");
   
}
khaue_viana_

Sim até ai eu entendo, mas queria um que se aplicasse no foreach para ser usado para limpar todos os campos

evertonsilvagomesjav
public void limparCampos(Container container) 
{ 
Component components[] = container.getComponents(); 

for (Component component : components) 
{ 
if (component instanceof JTextField) 
{ 
((JTextField)component).setText(null); 
} 
} 
}

Esse container que vc espera no argumento do método, vc tem que passar seu JPanel.

Component components[] = seuJPanel.getComponents(); 

for (Component component : components) 
{ 
if (component instanceof JTextField) 
{ 
((JTextField)component).setText(null); 
} 
}
khaue_viana_
public void limparCampos(JFrame container)
{
Component components[] = container.getComponents();

for (Component component : components)
{
if (component instanceof JTextField)
{
((JTextField)component).setText(null);
}
}
}

Fiz dessa forma , pois estou utilizando JFrame, mas não deu certo, não deu erro tbm não limpou.

evertonsilvagomesjav
[email removido:
]
public void limparCampos(JFrame container)
{
Component components[] = container.getComponents();

for (Component component : components)
{
if (component instanceof JTextField)
{
((JTextField)component).setText(null);
}
}
}

Fiz dessa forma , pois estou utilizando JFrame, mas não deu certo, não deu erro tbm não limpou.

Sim mas no seu JFrame vc nao usa um JPanel pra add seus Components?

davidbuzatto

Primeiro, vc pode usar um método recursivo para obter todos os componentes a partir de um determinado container.

public class Utils {

    public static List<Component> getAllComponents( Container container ) {

        List<Component> components = new ArrayList<Component>();

        for ( Component c : container.getComponents() ) {

            components.add( c );

            if ( c instanceof Container ) {
                components.addAll( getAllComponents( ( Container ) c ) );
            }
        }

        return components;

    }
}
Obtendo então essa lista, vc pode então dar os setText( "" );

Imagine que estamos dentro do método de um JFrame. Você faria assim:

for ( Component c : Utils.getAllComponents( getRootPane() ) ) {
    if ( c instanceof JTextField ) {
        ( ( JTextField ) c ).setText( "" );
    }
}
[]´s
evertonsilvagomesjav

Pra que esse método recursivo? Se os components dele estiver em um JPanel e ele fizer: Component components[] = jPanelUsado.getComponents(); irá retornar todos os components que estiver la.

khaue_viana_

Fiz o que você aconselhor e deu certo direto no JFrame.

Mas quero utilizar um metodo

public void limparCampos(JPanel container)
{
    Component components[] = container.getComponents();
    for (Component component : components)
    {
        if (component instanceof JTextField)
        {
            ((JTextField)component).setText(null);
        }
    }

E no JFrame fiz dessa forma

calc.limparCampos(pnePrincipal);

Mas não deu certo. Muito estranho.

davidbuzatto

Vou responder sua pergunta com três perguntas:
E se dentro do painel tiver outro painel? E se dentro deste outro painel, tiver outro painel? E só então ter os campos?

khaue_viana_

A estrutura esta assim:

JFrame - JPanel - JTextField.

E mesmo assim usando meu metodo num da certo.

evertonsilvagomesjav

Vou responder sua pergunta com três perguntas:
E se dentro do painel tiver outro painel? E se dentro deste outro painel, tiver outro painel? E só então ter os campos?

Respondeu kkk

khaue_viana_

PESSOAL DEU CERTO AKI

AGRADEÇO A TODOS!!!

rmendes08

Bem, só pra complementar, uma alternativa seria também manter uma lista específica dos JTextField, assim você não precisa nem de recursão nem ficar testando se a instância é de uma determinada classe.

khaue_viana_

Num entendi direito, mas mesmo assim agradeço muito a atenção!

ViniGodoy

Isso aqui não funcionou?
http://www.guj.com.br/posts/list/216682.java#1105939

khaue_viana_

Relacionado a esse que você me mostrou, muitos me mostraram identicos, mas não deu certo. Eu crio esse metodo dentro de uma classe e coloco como parâmetro JFrame ou JPanel. Mas não dá certo. No C# faço isso tranquilo. No java não é possivel?

ViniGodoy

Teria que ver pq não dá certo. Sempre usei algo assim, e sempre funcionou.

Você pode postar o código onde tentou usar?

Criado 18 de setembro de 2010
Ultima resposta 20 de set. de 2010
Respostas 17
Participantes 6