Limpar dados num jbutton

3 respostas
M

galera, como eu faço para limpar todos os campos do meu formulario …

sei que em html eh “reset” , mas em java, tentei fazer algo assim :

textfield.settext("");

mas tenho muitos textfields, uns 50 + ou -, nao existem algo mais prático ?

e dessa maneira, num jformattedfield, ele apagou a mascara …

3 Respostas

joseguilherme

Vou acompanhar seu tópico, pois tenho a mesma dificuldade.

Quando ao jformattedfield, use o método setValue().

Abraço

_Renatu

O que você pode fazer é, conforme for montando seu formulario, ir adicionando os objetos numa coleçao

Aí você itera na coleção (ou um for por exemplo) e chama o método setText("")…

dudaskank

Você pode criar um método utilitário para isso, mais ou menos como fiz aqui:

package teste.eduardo.pessoal;

import java.awt.Component;
import java.awt.Container;

import javax.swing.JFormattedTextField;
import javax.swing.JTextField;

public class GUIUtils {
	public static void limparCamposNoContainer(Container container) {
		Component components[] = container.getComponents();
		for (Component component : components) {
			if (component instanceof JFormattedTextField) {
				JFormattedTextField field = (JFormattedTextField) component;
				field.setValue(null);
			} else if (component instanceof JTextField) {
				JTextField field = (JTextField) component;
				field.setText("");
			}
			else if (component instanceof Container) {
				limparCamposNoContainer((Container) component);
			}
		}
	}
}

A ordem dos ifs é muito importante aqui, já que no caso do JFormattedTextField ele também é uma instância de JTextField, então se o outro if viesse antes, ele tentaria limpar usando setText() no lugar de setValue().

Aqui um form de exemplo, tem 10 JTextField e 1 JFormattedTextField.

package teste.eduardo.pessoal;

import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class TesteGUIUtils extends JFrame {
	private static final long serialVersionUID = 1L;

	public class ResetAction extends AbstractAction {
		private static final long serialVersionUID = 1L;

		public ResetAction() {
			putValue(Action.NAME, "Reset");
			putValue(Action.SHORT_DESCRIPTION, "Limpa os dados do formulário");
		}

		public void actionPerformed(ActionEvent e) {
			Object source = e.getSource();
			if (source instanceof JComponent) {
				JComponent component = (JComponent) source;
				Container form = component.getTopLevelAncestor();
				GUIUtils.limparCamposNoContainer(form);
			}
		}
	}

	public TesteGUIUtils() {
		super(TesteGUIUtils.class.toString());
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		JPanel panel = new JPanel(new GridLayout(12, 1));
		for (int i = 0; i < 10; i++) {
			panel.add(new JTextField());
		}
		JFormattedTextField field = new JFormattedTextField(
				new SimpleDateFormat("dd/MM/yyyy"));
		field.setValue(new Date());
		panel.add(field);
		JButton button = new JButton(new TesteGUIUtils.ResetAction());
		panel.add(button);
		add(panel);

		pack();
	}

	public static void main(String[] args) {
		new TesteGUIUtils().setVisible(true);
	}
}

Espero que ajude a dar umas idéias...

flw

Criado 26 de janeiro de 2007
Ultima resposta 26 de jan. de 2007
Respostas 3
Participantes 4