Pessoal estou tentando limpar todos os campos de texto do JFrame, e o método que estou usando até funciona, mas se preciso colocar alguns campos dentro de um JPane os campos que ficam dentro desse painel, não são apagados, só os de fora, acho que é pq o método que estou usando considera o painel como um componente do JFrame e por isso não percorre os componentes de dentro dele, alguém pode me ajudar a limpar todos os campos de texto, mesmo estando dentro de outros componentes?
public void limpaCampos(){
//Limpando todos os campos
for (int i = 0; i < getContentPane().getComponentCount(); i++) {
Component c = getContentPane().getComponent(i);
if (c instanceof JTextField) {
JTextField campoASerApagado = (JTextField) c;
campoASerApagado.setText(null);
}
}
}
É só usar recursividade:
public void limpaCampos() {
limpaCampos(getContentPane());
}
private void limpaCampos(Container container) {
for (Component c : container.getComponents()) {
if (c instanceof Container) {
limpaCampos((Container) c);
} else if (c instanceof JTextComponent) {
((JTextComponent) c).setText(""); // vazio não é null
}
}
}
staroski, obrigado por responder, mas ainda não consegui fazer funcionar, eu coloquei um System.out.println(), dentro de cada if pra ver se entrava no if do JTextField e ele só printa o
System.out.println(“container”), então quer dizer que ele não está pegando os textfields e agora ele nem apaga mais os campos dentro dos panes nem os que estão fora deles
public void limpaCampos() {
limpaCampos(getContentPane());
}
private void limpaCampos(Container container) {
for (Component c : container.getComponents()) {
if (c instanceof Container) {
limpaCampos((Container) c);
System.out.println("container");
} else if (c instanceof JTextField) {
System.out.println("textfield");
JTextField campoASerApagado = (JTextField) c;
campoASerApagado.setText(null);
}
}
}
Eu não sei se fiz algo de errado e por isso não funcionou
Falha minha, esqueci que os JTextComponent
s estendem Container
.
É só inverter a ordem dos if
s:
private void limpaCampos(Container container) {
for (Component c : container.getComponents()) {
if (c instanceof JTextComponent) {
((JTextComponent) c).setText(""); // vazio não é null
} else if (c instanceof Container) {
limpaCampos((Container) c);
}
}
}
Eu prefiro usar setText("")
ao invés de null
.
Evita a chance de acontecer NullPointerException
quando alguém quiser manipular o conteúdo do campo.
staroski, agora deu certo, muito obrigado mesmo, eu tava quebrando a cabeça e não estava dando certo de nenhum dos jeitos que eu tentei, vlw amigo =)
E obrigado pela dica de substituir o null pelo (""), vou usar tbm.