Olá, tenho um codigo que faz a varredura de alguns componentes de algum Container(como JPanel, JInternalFrame, etc.) e pra cada componente que ele encontra, caso seja um JPanel, um JTabbedPanel ou um JScrollPane, ele usa o mesmo metodo pra fazer a varredura desses componentes e tratar os dados. Usando JPanel e JTabbedPane da certo, mas quando tento usar num JScrollPane com um JTextArea dentro dele, da o seguinte erro:
[color=red]Exception in thread “AWT-EventQueue-0” java.lang.ClassCastException: javax.swing.JViewport cannot be cast to javax.swing.JScrollPane[/color]
Este erro acontece na linha 41 do código abaixo:
O que pode ser?
Segue meu código:
private void percorrerComponentes(Container master) {
Component[] comp=master.getComponents();
for(int i=0;i<comp.length;i++){
String nomeVar=null,valor=null;
if(comp[i] instanceof JTextField){
JTextField jtf=(JTextField)comp[i];
nomeVar=jtf.getName();
if(nomeVar.startsWith("s_")){//String
valor="'"+jtf.getText()+"'";
}else if(nomeVar.startsWith("n_")){//Inteiro ou double
valor=jtf.getText().replaceAll(",",".");
}
nomeVar=nomeVar.substring(nomeVar.indexOf("_")+1);
dados.add(nomeVar); valores.add(valor);
}else if(comp[i] instanceof JTextArea){
JTextArea jta=(JTextArea)comp[i];
nomeVar=jta.getName();
valor="'"+jta.getText()+"'";
nomeVar=nomeVar.substring(nomeVar.indexOf("_")+1);
dados.add(nomeVar); valores.add(valor);
}else if(comp[i] instanceof JComboBox){
JComboBox jcb=(JComboBox)comp[i];
nomeVar=jcb.getName();
if(nomeVar.startsWith("estado_")){
valor=((Estado)jcb.getSelectedItem()).id+"";
}else
if(nomeVar.startsWith("marca_")){
valor=((Marca)jcb.getSelectedItem()).id+"";
}else
if(nomeVar.startsWith("s_")){//String
valor="'"+jcb.getSelectedItem().toString()+"'";
}else if(nomeVar.startsWith("n_")){//Inteiro ou double
valor=jcb.getSelectedItem().toString().replaceAll(",",".");
}
nomeVar=nomeVar.substring(nomeVar.indexOf("_")+1);
dados.add(nomeVar); valores.add(valor);
}else if(comp[i] instanceof JScrollPane){
JScrollPane jsp=(JScrollPane)comp[i];
Component[] compJSP=jsp.getComponents();
for(int k=0;k<compJSP.length;k++){
percorrerComponentes((JScrollPane)compJSP[k]);
//vai chamar este mesmo metodo que faz a leitura dos outros componentes,
//pois dentro deste JTabbedPane pode ter paineis com outros JTabbedPanes.
}
}else if(comp[i] instanceof JPanel){
JPanel jp=(JPanel)comp[i];
Component[] compJP=jp.getComponents();
for(int k=0;k<compJP.length;k++){
percorrerComponentes((JPanel)compJP[k]);
//vai chamar este mesmo metodo que faz a leitura dos outros componentes,
//pois dentro deste JTabbedPane pode ter paineis com outros JTabbedPanes.
}
}else if(comp[i] instanceof JTabbedPane){
JTabbedPane jtp=(JTabbedPane)comp[i];
Component[] compJTP=jtp.getComponents();
for(int k=0;k<compJTP.length;k++){
if(compJTP[k] instanceof JPanel){
percorrerComponentes((JPanel)compJTP[k]);
//vai chamar este mesmo metodo que faz a leitura dos outros componentes,
//pois dentro deste JTabbedPane pode ter paineis com outros JTabbedPanes.
}
}
}
}
}