| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/03/2011 13:49:51
|
diego_qmota
JavaEvangelist
![[Avatar]](/images/avatar/e355819c0931a90b594aeb8d6a73587f.jpg)
Membro desde: 28/09/2008 15:44:35
Mensagens: 346
Localização: Paulínia
Offline
|
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
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?
This message was edited 1 time. Last update was at 11/03/2011 08:16:07
|
"Go ahead, make my day!" |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/03/2011 14:43:24
|
Marky.Vasconcelos
Moderador
![[Avatar]](/images/avatar/04940fadf3702cbd84b7a48161037c4f.png)
Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline
|
Voce não consegue fazer isso automaticamente.
O maximo que voce pode fazer é criar um modelo que represente um carro qualquer com estes atributos, e invés de Automaveis ou Carro_Volks voce adiciona esse modelo que representa um carro generico.
PS: Voce esta instanciando o TableModel dentro do for, voce nao devia fazer isso, voce deve instanciar apenas uma vez e utilizar a mesma instancia.
|
Facebook @MarkyHitchhiker +Mark WP: MarkyTech's
Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais
DefaultTableModel?! PARE! Não faça isso! Faça melhor!
Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)
Develop games is fantastic, with words you can make worlds!!!
DON'T PANIC!
MarkyHitchhiker's Blog! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/03/2011 08:15:35
|
diego_qmota
JavaEvangelist
![[Avatar]](/images/avatar/e355819c0931a90b594aeb8d6a73587f.jpg)
Membro desde: 28/09/2008 15:44:35
Mensagens: 346
Localização: Paulínia
Offline
|
Ok, entendi.
Vou fazer o seguinte então... colocar no tablemodel um modelo genérico (que pode ser Automovel) e ao lado da JTable um botão para editar as linhas selecionadas.
Dependendo das instâncias selecionadas, vai abrir um JDialog diferente para edição de Carro_Volk ou Automovel ou outras classes filhas, por exemplo...
Assim, poderei editar os atributos das classes filhas (só não vai dar para exibi-los).
Quanto ao laço for, a intenção era só detectar se tinha algum objeto "filho" na lista do Table Model. Se tivesse algum, eu copiava a lista de objetos e "reinstanciava" o TableModel para comportar a classe filha (ObjectTableModel<Carro_Volks>).
Se não tivesse nenhum, aí tudo bem. Eu mantinha a lista de objetos do Table Model e o Table Model como estava.
Só que não funcionou, porque o TableModel passou a dar problemas para guardar objetos Automovel.
Tentar exibir atributos de classes filha no ObjectTableModel <Automovel> dá problema também, falando que o atributo não existe.
Mas, se não é possível, não vai dar certo mesmo né? Valeu!
This message was edited 1 time. Last update was at 11/03/2011 08:26:13
|
"Go ahead, make my day!" |
|
|
 |
|
|
|
|