[RESOLVIDO] método recursivo para limpeza de formulário

Pessoal,

Tenho um formulário swing contendo JPanel e JScrollPane. Dentro destes painéis estão os campos ( JTextField, JFormattedTextField, JTextArea, JComboBox ).

Ao clicar em determinado botão deste formulário, será chamado um método que limpará todos estes campos.

Problema: preciso que o método de limpeza abaixo se torne recursivo, devido existir dentro do JPanel um JScrollPane com JTextArea que também deverá ser limpo.

A bronca está apenas na linha Component c = container.getComponent(i); onde a IDE aponta erro dizendo:

Segue código:

    /**
     * Limpar campos do JPanel ou JScrollPane passado como parâmetro.
     *
     * @param painel
     */
    public void limparFormulario(Object painel) {

        int qtdComponentes = 0;

        if (painel instanceof JPanel) {
            JPanel container = (JPanel) painel;
            qtdComponentes = container.getComponentCount();
        }
        if (painel instanceof JScrollPane) {
            JScrollPane container = (JScrollPane) painel;
            qtdComponentes = container.getComponentCount();
        }

        for (int i = 0; i < qtdComponentes; i++) {
            Component c = container.getComponent(i);

            if (c instanceof JScrollPane) {
                limparFormulario(c);
            }

            if (c instanceof JTextField) {
                JTextField field = (JTextField) c;
                field.setText("");
                if (!field.isEditable()) {
                    field.setBackground(new Color(240, 240, 240));
                }
            }

            if (c instanceof JFormattedTextField) {
                JFormattedTextField field = (JFormattedTextField) c;
                field.setText("");
                if (!field.isEditable()) {
                    field.setBackground(new Color(240, 240, 240));
                }
            }

            if (c instanceof JTextArea) {
                JTextArea field = (JTextArea) c;
                field.setText("");
                System.out.println("asd apagando jtextarea");
            }

            if (c instanceof JComboBox) {
                JComboBox field = (JComboBox) c;
                field.setSelectedIndex(0);
            }
        }
    }

Conhece algo a respeito de escopo de variável?
Se sim, então sabe que isto

if (painel instanceof JPanel) {  
        JPanel container = (JPanel) painel;  
        qtdComponentes = container.getComponentCount();  
    }

Impede que em qualquer outro if ou else ou o que seja, leia-se a variável container.

O problema é que está declarando container dentro dos if’s. Portanto eles somente estarão disponíveis neste escopo.

Tratando do escopo da variável fiz a seguinte mudança e o problema persiste.

A dúvida é saber como executar os métodos das linhas 98 e 101 do objeto passado como parâmetro.

Troque a declaração de

Object container;

para

Container container;

Galera,

Obrigado a todos!

Resolvido e segue abaixo para quem necessitar. Estava tendo dificuldade com o JTextArea presente dentro de um JViewport que por sua vez estava em um JScrollPane. A solução é essa:

    /**
     * Limpar campos de contêiner SWING passando como parâmetro (JPanel, JScrollPane e JViewport).
     *
     * @param painel
     */
    public void limparFormulario(Object painel) {

        int qtdComponentes;
        Container container = null;

        if (painel instanceof JPanel) {
            container = (JPanel) painel;
        }
        if (painel instanceof JScrollPane) {
            container = (JScrollPane) painel;
        }
        if (painel instanceof JViewport) {
            container = (JViewport) painel;
        }
        
        qtdComponentes = container.getComponentCount();

        for (int i = 0; i < qtdComponentes; i++) {
            Component c = container.getComponent(i);

            if (c instanceof JScrollPane || c instanceof JPanel || c instanceof JViewport) {
                limparFormulario(c);
                continue;
            }

            if (c instanceof JTextField) {
                JTextField field = (JTextField) c;
                field.setText("");
                if (!field.isEditable()) {
                    field.setBackground(new Color(240, 240, 240));
                }
            }

            if (c instanceof JFormattedTextField) {
                JFormattedTextField field = (JFormattedTextField) c;
                field.setText("");
                if (!field.isEditable()) {
                    field.setBackground(new Color(240, 240, 240));
                }
            }

            if (c instanceof JTextArea) {
                JTextArea field = (JTextArea) c;
                field.setText("");
            }

            if (c instanceof JComboBox) {
                JComboBox field = (JComboBox) c;
                field.setSelectedIndex(0);
            }
        }
    }