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.
E outra, o getComponents pode retornar um JPanel interno por exemplo, então
precisará (ou não) pegar os componentes desse container também.
R
rafaelviny
com respeito aos paineis interno é verdade, mas ai que está,
dentro do try vc faz seu tratamento dos objetos a serem manipulados
I
iurykrieger96
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.
publicvoidresetaForm(JPanelpainel_mae){Component[]componentes=painel_mae.getComponents();Stringclasse;for(intcontador=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(Exceptione){JOptionPane.showMessageDialog(this,"Não foi possível resetar os campos!");}}}
G
GilsonNunes
pq "classe.contains(“JTextField”)?? e se fosse um “MeuLabel extends JTextField” ???
o ideal não seria o uso do instanceof ?
G
GilsonNunes
GilsonNunes:
pq "classe.contains(“JTextField”)?? e se fosse um “MeuLabel extends JTextField” ???
o ideal não seria o uso do instanceof ?
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!");
}
}
}
G
GilsonNunes
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!");
}
}
}