Como obter componentes de um JFrame?

Bom dia a todos!

Estou desenvolvendo um modulo (desktop )para controle de acessos. Para isso, quero cadastrar todos os componentes por nome em uma tabela do dicionário de dados. Gostaria de implementar isso de forma automática ou seja através de um função que leia todo o conteúdo do JFrame ou JDialog e obter o nome para que eu possa persistir no banco. Já tentei de várias formar fazer um for{ } para ler todo o conteúdo do JFrame mas o getName só retorna null.
Alguém poderia me ajudar a contornar esse problema? Como faço para ler todos os componentes em um JFrame e pegar o nome de forma que eu possa gravá-los no DB.

Grato!

Component[] componentes = painel.getComponents();
        String classe;
        for (int contador = 0; contador < componentes.length; contador++) {
            classe = componentes[contador].getClass().getName();
            try {
                if (classe.contains("JTextField")) {
                    ((JTextField) componentes[contador]).setText("");
                }
            } catch (Exception e) {
               // tratamento de exception
            }

        }

isso pode te dar uma luz

PS: é a 3 vez que posto este codigo para 3 problemas diferentes, acho que ele é magico :stuck_out_tongue:

rafaelviny!

Já ajudou sim, me deu idéias que eu ainda não havia testado.

Valeu!

qualquer coisa posta ai…

eu já tirei muito suco do codigo acima…

Blz!

Assim que eu tiver concluído a implementação vou posta para uso da galaera!

Vlw

é assim que o forum funciona :slight_smile:

um ajuda o outro que ajuda os que irão precisar futuramente.

aguardo para ver sua implementação

Um detalhe, você precisa definir o name com setName, senão retornará null.
http://download.oracle.com/javase/6/docs/api/java/awt/Component.html#setName%28java.lang.String%29

E outra, o getComponents pode retornar um JPanel interno por exemplo, então
precisará (ou não) pegar os componentes desse container também.

com respeito aos paineis interno é verdade, mas ai que está,

dentro do try vc faz seu tratamento dos objetos a serem manipulados

Tava dando uma olhada na internet pra achar um método genérico para reset de formulários e acabei encontrando esse código. Só que como foi dito acima caso exista um painel interno os componentes dele não serão zerados, por isso bolei um método recursivo que varre todos os painéis do “painel mãe” e reseta todos os campos, só é necessário passar um painel com todos os painéis que você quera que sejam varridos.

public void resetaForm(JPanel painel_mae) {
        Component[] componentes = painel_mae.getComponents();
        String classe;
        for (int contador = 0; contador < componentes.length; contador++) {
            classe = componentes[contador].getClass().getName();
            try {
                if (classe.contains("JPanel")) {
                    resetaForm((JPanel) componentes[contador]);
                } else {
                    if (classe.contains("JTextField")) {
                        ((JTextField) componentes[contador]).setText("");
                    }
                    if (classe.contains("JFormattedTextField")) {
                        ((JFormattedTextField) componentes[contador]).setText("");
                    }
                    if (classe.contains("JComboBox")) {
                        ((JComboBox) componentes[contador]).setSelectedIndex(0);
                    }
                }
            } catch (Exception e) {
                JOptionPane.showMessageDialog(this, "Não foi possível resetar os campos!");
            }
        }
    }

pq "classe.contains(“JTextField”)?? e se fosse um “MeuLabel extends JTextField” ???

o ideal não seria o uso do instanceof ?

[quote=GilsonNunes]pq "classe.contains(“JTextField”)?? e se fosse um “MeuLabel extends JTextField” ???

o ideal não seria o uso do instanceof ?[/quote]

exemplo:

public void resetaForm(JPanel painel_mae) { for Component : painel_mae.getComponents() { try { if (Component instanceof(JPanel)) { resetaForm((JPanel) Component); } else if (Component instanceof(JTextComponent)) { //JTextField, JFormattedTextField, e cia ltda ((JTextComponent) Component).setText(""); } else if (Component instanceof(JComboBox)) { ((JComboBox) Component).setSelectedIndex(0); } } catch (Exception e) { JOptionPane.showMessageDialog(this, "Não foi possível resetar os campos!"); } } }

acho q o certo seria isso: //tem mt tempo q não mecho com java e não tenho eclipse aki em casa

dps de uma olhada na doc

public void resetaForm(Container painel_mae) { for (Component c : painel_mae.getComponents()) { try { if (c instanceof(Container)) { resetaForm((Container) c); } else if (c instanceof(JTextComponent)) { //JTextField, JFormattedTextField, e cia ltda ((JTextComponent) c).setText(""); } else if (c instanceof(JComboBox)) { ((JComboBox) c).setSelectedIndex(0); } } catch (Exception e) { JOptionPane.showMessageDialog(this, "Não foi possível resetar os campos!"); } } }