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