Estou com dúvidas sobre como exibir instâncias de classes filhas junto com as classes pai - na JTable - usando a biblioteca TOWEL http://code.google.com/p/towel/wiki/ObjectTableModel
Acontece o seguinte. Quero que a JTable exiba colunas adicionais quando houver um objeto de classe filha no ObjectTableModel.
Vou ilustrar com um exemplo hipotético (hipotético porque minhas classes têm muitos atributos para mostrar, e os atributos não são muito intuitivos…). Neste exemplo, estou usando o Excel para ilustrar como quero apresentar a JTable:
Suponho que eu tenha um ObjectTableModel com objetos da classe Automóvel. Minha JTable será exibida dessa forma:
Figura 1:
Tenho uma classe que é filha de Automóvel. Esta subclasse se chama Carro_Volks. Os atributos dessa subclasse são:
Figura 2:
Eu quero fazer o seguinte: quando eu acrescentar um objeto Carro_Volks na lista de objetos Automovel (do ObjectTableModel), quero que apareçam colunas adicionais na JTable para exibir atributos da subclasse.
Dessa forma, se for adicionada 1 ou mais instâncias de Carro_Volks no TableModel, serão exibidas mais colunas.
Figura 3
Se em uma linha da tabela, houver um objeto Automovel (pai), nessa linha as colunas das subclasses ficarão em branco e não poderão ser editadas.
Se não houver nenhum objeto Carro_Volks no TableModel, a tabela será exibida em seu formato normal (figura 1), ou seja, sem as colunas adicionais.
//Meu código
ObjectTableModel <Automovel> tableModel;
public final void initTabela(boolean reset) {
AnnotationResolver resolver = new AnnotationResolver(Automovel.class);
if (reset) {
tableModel = new ObjectTableModel<Automovel>(resolver, "renavam,cor,ano");
tableModel.setColEditable(1, true);
jTableColunasRelatorio.setModel(tableModel);
} else {
for (Automovel auto : tableModel.getData()) {
if (auto instanceof Carro_Volks) {
List <Automovel> listaAutos = tableModel.getData();
tableModel = new ObjectTableModel<ColunaRelatorio>(resolver, "renavam,cor,ano,modelo_motor,serie_motor");
tableModel.addAll(listaAutos);
tableModel.setColEditable(1, true);
tableModel.setColEditable(3, true);
tableModel.setColEditable(4, true);
break;
}
}
} //fim do bloco if..else
}
Esse código dá uma Exception: “The field cannot be resolved”. Quando tento reiniciar o resolver: resolver = new AnnotationResolver(Carro_Volks.class);, dá pau também…
Ajuda?