Olá gostaria de setar todos o JtextFields do conteiner para " "(vazio). Sem chamar cada um dos JTextField individualmente.
Eu escrevi essa função aqui:
private void limparCampos() {
JTextField fields = new JTextField();
for(int count = 0; count < this.getComponentCount(); count++){
if(this.getComponent(count).equals(javax.swing.JTextField.class)){
fields.setText(" ");
}
}
}
mas não esta dando certo.
Claro, a função não faz sentido:
- Você está comparando um componente com uma classe;
- Você está atribuindo vazio a um componente previamente criado, que não é o que vc comparou.
O certo seria:
private void limparCampos() {
for(int count = 0; count < this.getComponentCount(); count++) {
if(this.getComponent(count) instanceof javax.swing.JTextField) {
JTextField field = (JTextField) (this.getComponent(count));
field.setText("");
}
}
}
este codigo altera o texto de um JTextField mais vc pode colocar algo parecido em um metodo e chamar este metodo em um loop
Espero q isso ajude
import java.lang.reflect.Field;
import javax.swing.JTextField;
public class Telinha {
JTextField jt1 = new JTextField();
public static void main(String[] args) {
Telinha tela = new Telinha();
tela.jt1.setText("texto original");
System.out.println(tela.jt1.getText());
Field[] campos = tela.getClass().getDeclaredFields();
// Ate aqui temos um array com os atributos da classe
try {
Class classe = campos[0].getClass().forName("javax.swing.JTextField");
JTextField f = (JTextField) classe.cast(tela.jt1);
// aqui vc pode alterar o atributo
f.setText("meu novo texto ");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(tela.jt1.getText());
}
}
[quote=Thiago veiga]este codigo altera o texto de um JTextField mais vc pode colocar algo parecido em um metodo e chamar este metodo em um loop
Espero q isso ajude
[code]
import java.lang.reflect.Field;
import javax.swing.JTextField;
public class Telinha {
JTextField jt1 = new JTextField();
public static void main(String[] args) {
Telinha tela = new Telinha();
tela.jt1.setText("texto original");
System.out.println(tela.jt1.getText());
Field[] campos = tela.getClass().getDeclaredFields();
// Ate aqui temos um array com os atributos da classe
try {
Class classe = campos[0].getClass().forName("javax.swing.JTextField");
JTextField f = (JTextField) classe.cast(tela.jt1);
// aqui vc pode alterar o atributo
f.setText("meu novo texto ");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(tela.jt1.getText());
}
}
[/code][/quote]
Po cara valeu pela dica, mas o que eu quero é limpar todos os JTextField adicionados no Frame, entendeu?
Obrigado mesmo assim, valeu.
E não funcionou daquele jeito que eu postei? Eu não testei.
Como ele não respondeu eu respondo:
Funciona normal ^^
Se for a partir do java 5, pode-se utilizar o enhanced-for tambem:
for (Component disableJTextField : this.getComponents()) {
if (disableJTextField instanceof JTextField) {
JTextField textField = (JTextField) disableJTextField;
textField.setText(" ");
}
}
Dicas sobre o enhanced-for:
http://www.java-tips.org/java-se-tips/java.lang/the-enhanced-for-loop.html
Ve se isso te ajuda
import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class guj {
JFrame fr = new JFrame();
JTextField jt = new JTextField();
JTextField jt2 = new JTextField();
public void teste() {
JPanel cp = new JPanel();
jt.setText("texto original");
jt.setName("nome");
jt2.setText("texto original2");
jt2.setName("nome2");
cp.add(jt);
cp.add(jt2);
fr.add(cp);
fr.setSize(300, 200);
fr.setVisible(true);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (Component c : cp.getComponents()) {
if (c instanceof JTextField) {
JTextField j = (JTextField) c;
j.setText("");
}
}
}
public static void main(String[] args) {
guj g = new guj();
g.teste();
}
}