Fazer loop por todos os controles do formulário (PARTE II)

Amigos,

Ontem fiz um post sobre o assunto, acima, e o colega @TerraSkilll me ajudou com o link, abaixo:

Queria construir um loop que referenciasse cada controle do formulário (TextField, ComboBox, etc) e executasse as alterações que eu quisesse, nesses controles. O código contido no link, acima, Funcionou, PERFEITAMENTE.

Porém, como o meu formulário tem muito containers (um TABPANE, com 4 abas, principalmente), o código ainda ficou muito comprido, pois preciso fazer um loop para cada container e, dentro desse loop, referenciar todos os tipos de controle que quero referenciar.

Enfim… A PERGUNTA É: existe uma maneira de fazer um loop que faça uma varredura geral, independentemente dos containers? Algo tipo assim: “Independentemente dos containers existentes no formulário, faça uma varredura por todos os TextFields existentes no formulário e limpe cada um deles”.

Abaixo, segue o código que fiz, e repito: ELE ESTÁ FUNCIONANDO, PERFEITAMENTE. Só gostaria de encurtá-lo. Alguém tem uma dica?

@FXML public void AtivaDesativaCampos(boolean desatIdent, boolean desatContrato, boolean desatLocal, boolean desatFisica) {
    //Grupo GERAL (anchorpane geral)
    for (Node nodeGeral : LayoutGeral.getChildren()) 
    {
        if (nodeGeral instanceof TextField) 
        {
           ((TextField)nodeGeral).setDisable(desatFisica);
        }
        else if (nodeGeral instanceof ComboBox) 
        {
            ((ComboBox)nodeGeral).setDisable(desatIdent);
        }
        else if (nodeGeral instanceof TextArea) 
        {
            ((TextArea)nodeGeral).setDisable(desatIdent);
        }

    }    

    //Grupo IDENTIFICAÇÃO
    for (Node nodeIdent : tbIdent2.getChildren())
    {
        if (nodeIdent instanceof TextField)
        {
            ((TextField)nodeIdent).setDisable(desatIdent);
            
        }
        else if (nodeIdent instanceof ComboBox)
        {
            ((ComboBox)nodeIdent).setDisable(desatIdent);
        }
        else if (nodeIdent instanceof TextArea)
        {
            ((TextArea)nodeIdent).setDisable(desatIdent);
        }
        else if (nodeIdent instanceof Button)
        {
            ((Button)nodeIdent).setDisable(desatIdent);
        }
    }
    
    //Grupo CONTRATO
    for (Node nodeContrato : tbContrato2.getChildren())
    {
        if (nodeContrato instanceof TextField)
        {
            ((TextField) nodeContrato).setDisable(desatContrato);
        }
        else if (nodeContrato instanceof ComboBox)
        {
            ((ComboBox) nodeContrato).setDisable(desatContrato);
        }
        else if (nodeContrato instanceof TextArea)
        {
            ((TextArea) nodeContrato).setDisable(desatContrato);
        }
        else if (nodeContrato instanceof Button)
        {
            ((Button) nodeContrato).setDisable(desatContrato);
        }
    }
    
    //Grupo LOCALIZAÇÃO E REDES SOCIAIS
    for (Node nodeLocal : tbLocal2.getChildren())
    {
        if (nodeLocal instanceof TextField)
        {
            ((TextField) nodeLocal).setDisable(desatLocal);
        }
        else if (nodeLocal instanceof ComboBox)
        {
            ((ComboBox) nodeLocal).setDisable(desatLocal);
        }
        else if (nodeLocal instanceof TextArea)
        {
            ((TextArea) nodeLocal).setDisable(desatLocal);
        }
        else if (nodeLocal instanceof Button)
        {
            ((Button) nodeLocal).setDisable(desatLocal);
        }
    }
    
    //Grupo PESSOA FÍSICA
    for (Node nodeFisica : tbFisica2.getChildren())
    {
        if (nodeFisica instanceof TextField)
        {
            ((TextField) nodeFisica).setDisable(desatFisica);
        }
        else if (nodeFisica instanceof ComboBox)
        {
            ((ComboBox) nodeFisica).setDisable(desatFisica);
        }
        else if (nodeFisica instanceof TextArea)
        {
            ((TextArea) nodeFisica).setDisable(desatFisica);
        }
        else if (nodeFisica instanceof Button)
        {
            ((Button) nodeFisica).setDisable(desatFisica);
        }
    }
    
}

Estude o padrão de projeto Visitor.
Não é trivial de implementar, mas depois de pronto, a manutenção é fácil.

1 curtida