Adicionar/Remover colunas de uma JTable  XML
Índice dos Fóruns » Interface Gráfica
Autor Mensagem
arthurthiago
Debugger
[Avatar]

Membro desde: 06/02/2007 18:17:34
Mensagens: 72
Offline

Fala galera!

Estou tendo um problema para gerenciar a adição/remoção de uma coluna dentro de uma JTable. O que acontece é que minha tabela tem que ser dinamicamente acrescentada de linhas e/ou colunas de acordo com o que o usuario quer.

Os problemas começam quando eu excluo e logo depois adiciono uma coluna, vou dar um exemplo para ficar mais claro:

tenho N colunas
deleto uma e fico com N-1 colunas
quando adiciono uma coluna ao invês de ter novamente N colunas eu fico com N+1 colunas.

O que eu acho é que as colunas estão sendo removidas apenas visualmente e quando tento inserir uma coluna ele nunca excluiu aquela ultima coluna no modelo.

ficou muito confuso ou vcs entenderam?

Abaixo foi colocar os códigos de inserção de coluna e remoção:





Espero a resposta galera!
Um abraço!

This message was edited 2 times. Last update was at 09/03/2008 12:38:45

arthurthiago
Debugger
[Avatar]

Membro desde: 06/02/2007 18:17:34
Mensagens: 72
Offline

Ninguém sabe oq pode estar acontencendo?!
arthurthiago
Debugger
[Avatar]

Membro desde: 06/02/2007 18:17:34
Mensagens: 72
Offline

estou revivendo este tópico pq ainda n achei uma solução. Se alguem puder sugerir algo.
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20581
Localização: Curitiba/PR
Offline

Depois de adicionar a coluna faça:
seuTableModel.fireTableStructureChanged();

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
arthurthiago
Debugger
[Avatar]

Membro desde: 06/02/2007 18:17:34
Mensagens: 72
Offline

Valeu por ter respondido Vini. Porém não funcionou... Continuou com o problema.. =P

O que pode ser isso?
Renato.Pinheiro
Thread.start()
[Avatar]

Membro desde: 10/06/2007 11:16:14
Mensagens: 31
Localização: Rio de Janeiro
Offline

Já tentou usar o AbstractTableModel?

Atenciosamente,
Renato Pinheiro
www.gpi.ufrj.br
[WWW] [ICQ]
mrsmylle
JavaEvangelist

Membro desde: 20/05/2005 00:02:06
Mensagens: 432
Offline

Não dá erro?
Você está fazendo n = n-1 quando remove?? ou n+ 1 quando adiciona?
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20581
Localização: Curitiba/PR
Offline

Renato.Pinheiro wrote:Já tentou usar o AbstractTableModel?


Apoiado. O DefaultTableModel só serve para a Sun mostrar exemplos simples.

Tem um ótimos tutoriais sobre como criar um TableModel de verdade, filho de AbstractTableModel:
http://www.informit.com/articles/article.aspx?p=332278
http://www.informit.com/articles/article.aspx?p=333472

Isso torna o código mais modular, limpo e orientado a objetos.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
Renato.Pinheiro
Thread.start()
[Avatar]

Membro desde: 10/06/2007 11:16:14
Mensagens: 31
Localização: Rio de Janeiro
Offline

Isso ai, e não se intimide não, o AbstractModel assusta mas é bem mais simples do que parece. Alias, tenho usado os models para tudo, meus list, combobox etc nunca mais foram os mesmos uahuahua

Atenciosamente,
Renato Pinheiro
www.gpi.ufrj.br
[WWW] [ICQ]
leopoldof
GUJ Master

Membro desde: 07/03/2008 07:40:45
Mensagens: 1012
Offline

Para quem quiser...achei uma solução sem usar esse AbstractModel...

Em vez de usar essa linha para adicionar como citado na dúvida anteriormente,


adicione uma coluna através do columnModel e não pelo model direto aí dá certo ao adicionar novamente, ele vai adicionar somente uma enão duas

Cria-se um TableColumn e adiciona ele
assim...
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20581
Localização: Curitiba/PR
Offline

leopoldof wrote:Para quem quiser...achei uma solução sem usar esse AbstractModel...


Sem usar o AbstractTableModel você só estará recorrendo em xunxo atrás de xunxo. Não faça isso, aprenda a fazer direito.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
leopoldof
GUJ Master

Membro desde: 07/03/2008 07:40:45
Mensagens: 1012
Offline

Mas para que reescrever uma classe se basta pegar o model da coluna em vez do model da tabela... só usar um método a mais......xunxo seria reecrever uma classe somente pra fazer isso.... uma carga a mais de processamento no sistema... se precisar de algo mais complexo, daí até concordo...mas pra isso... é quebrar a cabeça em vão e um pouquinho mais de peso no sistema...pois é uma classe a mais a ser carregada...

This message was edited 1 time. Last update was at 15/01/2010 17:31:42

ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20581
Localização: Curitiba/PR
Offline

leopoldof wrote:Mas para que reescrever uma classe se basta pegar o model da coluna em vez do model da tabela... só usar um método a mais......xunxo seria reecrever uma classe somente pra fazer isso.... uma carga a mais de processamento no sistema... se precisar de algo mais complexo, daí até concordo...mas pra isso... é quebrar a cabeça em vão e um pouquinho mais de peso no sistema...pois é uma classe a mais a ser carregada...


O DefaultTableModel é extremamente ineficiente. Colocar classes a mais no projeto não é "carga". Ele trabalha com Vectors de Vectors, tudo isso sincronizado. Ele força você a duplicar os seus dados de modelo na view, o que exige processamento e memória. Fora que, por conta dessa duplicação, você frequentemente fere o MVC.

Torna o código confuso, embolado. Por isso é mais difícil de fazer e manter aplicações com ele.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
marcobiscaro2112
JWizard

Membro desde: 01/12/2008 11:56:04
Mensagens: 2408
Localização: São Paulo - SP
Offline

leopoldof wrote:Mas para que reescrever uma classe se basta pegar o model da coluna em vez do model da tabela... só usar um método a mais......xunxo seria reecrever uma classe somente pra fazer isso.... uma carga a mais de processamento no sistema... se precisar de algo mais complexo, daí até concordo...mas pra isso... é quebrar a cabeça em vão e um pouquinho mais de peso no sistema...pois é uma classe a mais a ser carregada...

Você não estará reescrevendo uma classe. Você estará escrevendo a sua classe baseada no AbstractTableModel (não é reescrever pois essa classe ainda não está escrita - DefaultTableModel é, em aplicações de verdade, furada na certa). E não haverá uma classe a mais carregada já que somente sua implementação será usada (e não sua implementação + DefaultTableModel).

Marco Biscaro.

Seja livre!

Você sabia que provavelmente há milhares de arquivos duplicados no seu computador?

Ei... você está usando DefaultTableModel no seu projeto?? Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[Email] [WWW] [MSN]
leopoldof
GUJ Master

Membro desde: 07/03/2008 07:40:45
Mensagens: 1012
Offline

Aproveitando o assunto de JTable.... como se faz para centralizar o texto do cabeçalho e retirar a ação de ordenar dele?
 
Índice dos Fóruns » Interface Gráfica
Ir para:   
Powered by JForum 2.1.8 © JForum Team