Existe um metodo que apague tudo?

Boa noite, Galera, estou com uma duvida, existe algum metodo que apague todas as

informações preenchidas nesse formulario que eu fiz eu clicando no Botão Limpar ???


package marcacaodeconsulta;

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

public class JanelaInicial extends JFrame{

	private String [] listaCovenio={"Unimed","Amil","Golden","Bradesco","Dix"};
	
	Container c ;
	JLabel jl1,jl2,jl3,jl4,jl5,jl6;
	JPanel p1 , p2, p3, p4, p5,p6,p7,p8;
	JTextField tx1, tx2, tx3, tx4, tx5;
	JComboBox c1;
	JRadioButton r1,r2;
	JButton b1,b2,b3;
	ButtonGroup test1;
	
	public JanelaInicial(){
		
		c =  getContentPane();
		c.setLayout(new FlowLayout());
		
		b1 = new JButton("OK");
		b2 = new JButton("Limpa");
		b3 = new JButton("Retorna");
		
		jl1 = new JLabel("Agenda - Marcação de Horário");
		
		jl2 = new JLabel("Nome do Paciente:");
		
		jl3 = new JLabel("Resultado:");
		
		jl4 = new JLabel("Celular:");
		
		jl5 = new JLabel("Covênio: ");
		
		jl6 = new JLabel("Primeira Consulta ?");
		
		c1 = new JComboBox(listaCovenio);
		c1.setMaximumRowCount(4);
		
		tx1 = new JTextField(20);
		tx2 = new JTextField(20);
		tx3 = new JTextField(10);
		tx4 = new JTextField(10);
		
		p1 = new JPanel();
		p1.add(jl1);
		
		p2 = new JPanel();
		p2.add(jl2);
		p2.add(tx1);
	
		
		p3 = new JPanel();
		p3.add(jl3);
		p3.add(tx3);
		p3.add(jl4);
		p3.add(tx4);
		
		
		
		p5 = new JPanel();
		p5.setLayout( new BorderLayout());
		

		p5.add(p1,BorderLayout.NORTH);
		p5.add(p2,BorderLayout.CENTER);
		p5.add(p3,BorderLayout.SOUTH);
		
		p6 = new JPanel();
		p6.setLayout(new BorderLayout());
		
		p6.add(p5, BorderLayout.NORTH);
		
		r1 = new JRadioButton("Sim");
		r2 = new JRadioButton("Não");
		test1 = new ButtonGroup();
		test1.add(r1);
		test1.add(r2);
		
		p7 = new JPanel();
		p7.add(jl5);
		p7.add(c1);
		p7.add(jl6);
		p7.add(r1);
		p7.add(r2);
		
		p8 = new JPanel();
		
		p8.add(b1);
		p8.add(b2);
		p8.add(b3);
		
		p6.add(p7,BorderLayout.CENTER);
		
		p6.add(p8,BorderLayout.SOUTH);
		
		
		c.add(p6);
		
		pack();
		setVisible(true);
		
		
		
	}
	public static void main(String[] args) {
		JanelaInicial ji1 = new JanelaInicial();
	}
}

Todos não, voçê tem que apagar um a um, com o método setText

tx1.setText("");

[quote=cfred]Todos não, voçê tem que apagar um a um, com o método setText

tx1.setText("");

Boa noite a todos.

Esta informação está correta, contudo, já imaginou se voce coloca mas de 350 JTextFields no formulário :?:

É claro que eu estou exagerando, porém se tiver 20 ou mais, já fica meio chato de voce criar um método e fica digitando a toda hora dentro dêle:

  .....
  meutxt1setText("");
  ,,,,,
  .....
  meutxt20.setText("");
  .....
  .....
  meutxt?.setText("");

Seus problemas acabaram :!: :!: :!:

O método abaixo não é nenhum produto Tabajara, porque funciona, e as linguagens orientada a objetos oferecem recurso pra isto.

Toda classe JFrame, Frame e JPanel, são classes Containers que tem na sua linha de hierarquia de classes, a classe Container, e esta última classe, contém os métodos “getComponentCount” e “getComponent(index)” onde index é índice do componente. Então voce pode construir o método, que não só abrange JTextFields, mas todos os componentes que possam ser limpados, assim:


  public void clearComponents(){
        for (int i=0; i < getComponentCount(); i++){
            if (getComponent(i) instanceof JTextField){
                JTextField text = (JTextField)getComponent(i);
                text.setText("");
            } else if (getComponent(i) instanceof JTextArea){
                JTextArea txtarea = (JTextArea)getComponent(i);
                txtarea.setText("");
            } else if (getComponent(i) instanceof JComboBox){
                JComboBox combo = (JComboBox)getComponent(i);
                combo.setSelectedIndex(-1);
            } else if(getComponent(i) instanceof JCheckBoxMenuItem){
                JCheckBoxMenuItem check = (JCheckBoxMenuItem)getComponent(i);
                check.setSelected(false);
            } else if (getComponent(i) instanceof JRadioButtonMenuItem){
                JRadioButtonMenuItem radio = (JRadioButtonMenuItem)getComponent(i);
                radio.setSelected(false);
            }
        }
    }

Quando voce quiser apagar o conteúdo dos JTextFields, somente com uma linha de comando, assim:

    ......
    clearComponents();
    ......

Melhor do que ficar digitando toda hora o setText(""), não é mesmo. :idea: :slight_smile: :smiley:

E dá pra dar uma otimizada no código do discorpio: passe por parâmetro um Container, o qual você quer limpar os campos. Depois coloque uma outra verificação se for do tipo Container, chame o método recursivamente.
Abraços!

[quote=marvinla]E dá pra dar uma otimizada no código do discorpio: passe por parâmetro um Container, o qual você quer limpar os campos. Depois coloque uma outra verificação se for do tipo Container, chame o método recursivamente.
Abraços![/quote]

Bom dia a todos.

Aproveitando a dica de Marvinla, também há a opção de voce passar o Container, e ficaria assim:


public void clearComponents(Container cont){  
      for (int i=0; i < cont.getComponentCount(); i++){  
          if (cont.getComponent(i) instanceof JTextField){  
              JTextField text = (JTextField)cont.getComponent(i);  
              text.setText("");  
          } else if (cont.getComponent(i) instanceof JTextArea){  
              JTextArea txtarea = (JTextArea)cont.getComponent(i);  
              txtarea.setText("");  
          } else if (cont.getComponent(i) instanceof JComboBox){  
              JComboBox combo = (JComboBox)cont.getComponent(i);  
              combo.setSelectedIndex(-1);  
          } else if(cont.getComponent(i) instanceof JCheckBoxMenuItem){  
              JCheckBoxMenuItem check = (JCheckBoxMenuItem)cont.getComponent(i);  
              check.setSelected(false);  
          } else if (cont.getComponent(i) instanceof JRadioButtonMenuItem){  
              JRadioButtonMenuItem radio = (JRadioButtonMenuItem)cont.getComponent(i);  
              radio.setSelected(false);  
          }  
      }  
  }  

Se voce reparar, não acrescenta quase código, porque voce não precisa fazer casting de Container para JFrame, Frame, o JPanel, eis que, os métodos “getComponentCount()” e “getComponent(int index)” estão declarados na classe “Container”, então voce pode usá-los diretamente que a referência a JFrame, Frame ou JPanel será a mesma. O Casting somente é necessário quando voce tenha que usar um método declarado na subclasse e que não há na super classe, como no caso o método “setText(…)”, que não existe na classe “Component”, então há a necessidade de se fazer o casting para o componente apropriado que tenha o método setText(…) declarado.

Contudo, preferi criar o método “clearComponents()” que passei no post anterior, onde está declarado numa classe abstrata que extende (herda) de JFrame, que funciona como um JFrame genérico. Fica mais prático fazer assim, pois voce pode fazer referência a todos os componentes nela contido sem precisar de ficar passando Container como parâmetro.