AutoFiltro em JTable e TableModel prático: Baixem  XML
Índice dos Fóruns » Interface Gráfica
Autor Mensagem
ViniGodoy
Moderador
[Avatar]

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

Depois de ver muita gente pedindo aqui no GUJ, decidi postar nossa classe de AutoFiltro para JTable. Funciona exatamente igual ao AutoFiltro do Excel, porém, também suporta filtro por wildcards (estilo os do DOS).

Também anexei um TableModel muito mais inteligente que o DefaultTableModel. Ele se baseia num enum de colunas e já tem todas as funcionalidades que esperamos de um model (ele é muito próximo de um ArrayList).

Dêem uma olhada. Aí tem também um exemplo, que escrevi para mostrar para um aluno meu como se fazia para usar.
 Nome do arquivo src.zip [Disk] Download
 Descrição Auto-Filtro estilo Excel em JTable + TableModel esperto
 Tamanho 22 Kbytes
 Baixado:  1166 vez(es)

This message was edited 3 times. Last update was at 23/08/2008 10:47:54


Desenvolve jogos de computadores?
http://www.pontov.com.br

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


Trabalhe com JTable de uma forma inteligente com o ObjectTableModel e com o Auto-Filtro!
[WWW]
Mark_Ameba
Forum Spammer
[Avatar]

Membro desde: 11/04/2007 18:18:20
Mensagens: 3253
Localização: São Paulo/SP
Offline

Pena que vi isso só agora precisei disso a um tempo e acabei criando o meu.

Mas o meu TableModel, TableHeader e RowFilter se baseia em Reflection.




Projeto Mark-Utils no Google Code!

Ainda usando DefaultTableModel no seu projeto?? PARE! Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
Trabalhe com JTable de uma forma inteligente com o ObjectTableModel e com o Auto-Filtro!

Tower Defense Game - RC 3 - 19/02/2010
MarkyBlog: http://markyameba.wordpress.com : Swing & Reflection.

Faça perguntas inteligentes
Programar telas Swing na mão nunca foi tão fácil: MigLayout!
Totalmente GridBagLayout (Joke)

Develop games is fantastic, with words you can make worlds!!!

It's more useful to have a fun game with old graphics, than a boring game with good graphics.

Quer aprender a fazer jogos? : Créditos ao ViniGodoy

Each of their nuggets of wisdom contracted to a sound bite:

Joshua Bloch: Write Lots of Code
Chet Haase: Don't Put Your Entire Application in One Method
Masood Mortazavi: Start Simple and Keep Learning
Cay Horstmann: First, Don't Panic
[WWW] [MSN]
javer
JavaEvangelist
[Avatar]

Membro desde: 10/09/2007 12:06:29
Mensagens: 374
Localização: São Paulo - SP
Offline

ViniGodoy wrote:Depois de ver muita gente pedindo aqui no GUJ, decidi postar nossa classe de AutoFiltro para JTable. Funciona exatamente igual ao AutoFiltro do Excel, porém, também suporta filtro por wildcards (estilo os do DOS).

Também anexei um TableModel muito mais inteligente que o DefaultTableModel. Ele se baseia num enum de colunas e já tem todas as funcionalidades que esperamos de um model (ele é muito próximo de um ArrayList).

Dêem uma olhada. Aí tem também um exemplo, que escrevi para mostrar para um aluno meu como se fazia para usar.

Me desculpe por voltar nesse assunto mas eu peguei seu código e não consegui colocar ele na minha tabela.

Tenho um AbstractTabelModel com os seguintes tipos de colunas:


Na view:

Será que você poderia me dar uma dica como eu posso usar esse seu Filtro na minha tabela?

=======================================
Netbeans 6.5 - TopLink - Hibernate Validator - Swing => Ubuntu
[WWW]
ViniGodoy
Moderador
[Avatar]

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

Por que seu model tem uma referência à tabela? Essa referência não deveria existir! =o



É bom guardar a variável do filtro em uma propriedade, já que você precisará dela para converter as linhas da view na linha do model, e vice-versa.

This message was edited 1 time. Last update was at 31/08/2009 16:17:01


Desenvolve jogos de computadores?
http://www.pontov.com.br

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


Trabalhe com JTable de uma forma inteligente com o ObjectTableModel e com o Auto-Filtro!
[WWW]
javer
JavaEvangelist
[Avatar]

Membro desde: 10/09/2007 12:06:29
Mensagens: 374
Localização: São Paulo - SP
Offline

ViniGodoy wrote:Por que seu model tem uma referência à tabela? Essa referência não deveria existir! =o



É bom guardar a variável do filtro em uma propriedade, já que você precisará dela para converter as linhas da view na linha do model, e vice-versa.


Tenho uma referência a tabela porque tenho esse método aqui:


Esse filtro na verdade apenas reordena as linhas da tabela?

=======================================
Netbeans 6.5 - TopLink - Hibernate Validator - Swing => Ubuntu
[WWW]
ViniGodoy
Moderador
[Avatar]

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

Ele reordena e filtra.

O problema é que você passa a ter dois índices, e isso provavelmente irá quebrar seu método.

Um deles é o que o tablefilter está exibindo, o outro é o do seu model. O tablefilter tem métodos para converter um índice no outro.

Desenvolve jogos de computadores?
http://www.pontov.com.br

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


Trabalhe com JTable de uma forma inteligente com o ObjectTableModel e com o Auto-Filtro!
[WWW]
javer
JavaEvangelist
[Avatar]

Membro desde: 10/09/2007 12:06:29
Mensagens: 374
Localização: São Paulo - SP
Offline

ViniGodoy wrote:Por que seu model tem uma referência à tabela? Essa referência não deveria existir! =o



É bom guardar a variável do filtro em uma propriedade, já que você precisará dela para converter as linhas da view na linha do model, e vice-versa.


Quando eu uso meu AbastractTableModel:Sai com as colunas formatadas com os tamanhos que eu defini e eu consigo adicionar linhas (Financeiro) tranqüilamente:


Agora quando eu aplico o modelo com o Filtro as colunas saem todas desconfiguradas e eu não consigo adicionar linhas:




Alguma dica de como eu poderia resolver isso?

=======================================
Netbeans 6.5 - TopLink - Hibernate Validator - Swing => Ubuntu
[WWW]
ViniGodoy
Moderador
[Avatar]

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

Nessa linha:
(FinanceiroTableModel) tabelaContaPagarReceber.getModel();

Você está tentando obter o model e fazer um cast para FinanceiroTableModel. No entanto, o model da tabela agora é um TableFilter.

Eu sugiro que você guarde uma referência do seu Model e do Filter, em atributos que você tenha certeza de quem é quem. Então, evite a chamada de table.getModel e use esses atributos diretamente.

This message was edited 1 time. Last update was at 01/09/2009 21:47:54


Desenvolve jogos de computadores?
http://www.pontov.com.br

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


Trabalhe com JTable de uma forma inteligente com o ObjectTableModel e com o Auto-Filtro!
[WWW]
javer
JavaEvangelist
[Avatar]

Membro desde: 10/09/2007 12:06:29
Mensagens: 374
Localização: São Paulo - SP
Offline

Ok, eu guardei a referência ao filtro, minha pergunta é: como eu adiciono dados a JTable?
Quando eu usava o meu modelo eu tinha um método nele que recebia uma lista e atualizava o modelo e a tabela, agora nesse modelo do TableFilter eu não entendi como adicionar dados nele.


=======================================
Netbeans 6.5 - TopLink - Hibernate Validator - Swing => Ubuntu
[WWW]
ViniGodoy
Moderador
[Avatar]

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

Basta adicionar dados ao seu modelo, normalmente (e não ao filtro).
Por isso é importante guardar uma referência para o model e para o filtro.

Desenvolve jogos de computadores?
http://www.pontov.com.br

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


Trabalhe com JTable de uma forma inteligente com o ObjectTableModel e com o Auto-Filtro!
[WWW]
javer
JavaEvangelist
[Avatar]

Membro desde: 10/09/2007 12:06:29
Mensagens: 374
Localização: São Paulo - SP
Offline

Ok, muito obrigado, funcionou como você disse, agora eu gostaria de saber porque está sendo perdida todas as minhas configurações no ColumnModel (CellRenders, CellEditor, largura das colunas)?


No construtor da classe TableFilter eu verifiquei as larguras das colunas e estão chegando corretamente.

=======================================
Netbeans 6.5 - TopLink - Hibernate Validator - Swing => Ubuntu
[WWW]
ViniGodoy
Moderador
[Avatar]

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

Não sei, nunca vi esse comportamento. E olha que também uso colunas de tamanho diferente, etc.

Não funciona nem se vc definir esses dados depois de associar o filtro?

Desenvolve jogos de computadores?
http://www.pontov.com.br

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


Trabalhe com JTable de uma forma inteligente com o ObjectTableModel e com o Auto-Filtro!
[WWW]
javer
JavaEvangelist
[Avatar]

Membro desde: 10/09/2007 12:06:29
Mensagens: 374
Localização: São Paulo - SP
Offline

Muito obrigado, agora funcionou, espero não mais ter que precisar te incomodar com esse assunto novamente.


Muito obrigado mesmo.

=======================================
Netbeans 6.5 - TopLink - Hibernate Validator - Swing => Ubuntu
[WWW]
ViniGodoy
Moderador
[Avatar]

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

Sem problemas. Fico feliz em saber que a classe tenha funcionado num table complexo como o seu.

Desenvolve jogos de computadores?
http://www.pontov.com.br

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


Trabalhe com JTable de uma forma inteligente com o ObjectTableModel e com o Auto-Filtro!
[WWW]
javer
JavaEvangelist
[Avatar]

Membro desde: 10/09/2007 12:06:29
Mensagens: 374
Localização: São Paulo - SP
Offline

Na verdade tenho mais uma pergunta.

Onde eu trato a formatação do dado adicionado naquele popUP da coluna, na imagem tem uma coluna do tipo Date que quero mostrar a data no formato: dd/MM/yyyy



Eu (ainda) não consegui localizar nos código onde está sendo feito isso, e também como converter de volta quando for selecionado pelo usuário para atualizar o filtro.

=======================================
Netbeans 6.5 - TopLink - Hibernate Validator - Swing => Ubuntu
[WWW]
 
Índice dos Fóruns » Interface Gráfica
Ir para:   
Powered by JForum 2.1.8 © JForum Team