Limpar dados num jbutton

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 …

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

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

Abraço

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("")…

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

[code]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);
}
}
}
}
[/code]

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.

[code]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);
}

}
[/code]

Espero que ajude a dar umas idéias…

flw