DataTable Ordenada
15/09/2008
0
Alguem sabe como fazer ordenação pelas colunas de uma DataTable ?
Uso JPA
Obrigado
Uso JPA
Obrigado
Mazzi
Curtir tópico
+ 0
Responder
Posts
11/02/2009
Anonymous
Aqui segue o código da tableModel:
Na tabela (no meu caso tabelaUsuario) você adiciona o listener abaixo:
package com.sismed.tablemodel; import java.util.Arrays; import java.util.Comparator; import javax.swing.table.DefaultTableModel; import org.apache.log4j.Logger; import com.Usuario; import com.resources.Messages; public class UsuarioTableModel extends DefaultTableModel{ private Usuario[] vetorUsuarios; private static String[] rotulosDasColunas = {Messages.getString("ColumnLogin"),Messages.getString("ColumnPermissao")}; private booleanordemCrescente;// Ordem de ordenação private static Logger logger = Logger.getLogger(IWG2.class); /** * Uma instância dessa classe deve necessariamente * estar ligada a um array de usuários. */ public UsuarioTableModel(Usuario[] vetUsuarios) { vetorUsuarios = vetUsuarios; super.setColumnIdentifiers(rotulosDasColunas); } /** * Esse método retorna o valor que deve ser impresso * em cada célula da tabela. */ public Object getValueAt(int linha, int coluna) { switch(coluna) { case 0: return vetorUsuarios[linha].getNomusu(); case 1: if (vetorUsuarios[linha].getPermusu().intValue() == 0) { return Messages.getString("permissaoCadastroRemocaoVisualizacao"); } else if (vetorUsuarios[linha].getPermusu().intValue() == 1) { } else if (vetorUsuarios[linha].getPermusu().intValue() == 2) { return Messages.getString("permissaoRemocaoVisualizacao"); } else if (vetorUsuarios[linha].getPermusu().intValue() == 3){ return Messages.getString("permissaoVisualizacao"); } default: return "-"; } } /** * Esse método diz ao JTable que nenhuma célula é * editável. */ public boolean isCellEditable(int row, int col) { return false; } /** * Retorna o número de linhas (produtos) da tabela. */ public int getRowCount() { if (vetorUsuarios == null) return 0; return vetorUsuarios.length; } /** * Retorna o número de colunas da tabela */ public int getColumnCount() { return rotulosDasColunas.length; } /** * Retorna o objeto correspondente a uma linha * da tabela * @param indice - índice da linha da tabela * @return ret - Usuário */ public Usuario getUsuario(int indice) { Usuario ret = null; if (indice < vetorUsuarios.length) ret = vetorUsuarios[indice]; return ret; } /** * Ordena o vetor de usuários de acordo com o número passado como * parâmetro. * * @author Ulisses Nunes * * @param numColuna - Número da coluna clicada na tabela */ public void ordenarTabela(int numColuna) // Ordenando pelo nome do usuario if (numColuna == 0) { try { Arrays.sort(vetorUsuarios,new Comparator() { public int compare( Object obj1, Object obj2 ) { Usuario usu1 = (Usuario) obj1; Usuario usu2 = (Usuario) obj2; if (usu1 == null || usu1.getNomusu() == null) return +1; else if (usu1 == null || usu1.getNomusu() == null) return -1; else return (usu1.getNomusu().compareToIgnoreCase(usu2.getNomusu())); } }); } catch (RuntimeException e) { logger.error("Erro de ordenação: UsuarioTableModel coluna 0:"); logger.error(e.getMessage()); System.out.println("Erro de ordenação: UsuarioTableModel coluna 0:"); e.printStackTrace(); } } // Ordenando pela permissão do usuario else if (numColuna == 1) { try { Arrays.sort(vetorUsuarios,new Comparator() { public int compare( Object obj1, Object obj2 ) { Usuario usu1 = (Usuario) obj1; Usuario usu2 = (Usuario) obj2; if (usu1 == null || usu1.getPermusu() == null) return +1; else if (usu1 == null || usu1.getPermusu() == null) return -1; else return (usu1.getPermusu().compareTo(usu2.getPermusu())); } }); } catch (RuntimeException e) { logger.error("Erro de ordenação: UsuarioTableModel coluna 1:"); System.out.println("Erro de ordenação: UsuarioTableModel coluna 1:"); e.printStackTrace(); } } // Invertendo o vetor se a ordem for decrescente if (!ordemCrescente) { Usuario[] vetorReverso = new Usuario[vetorUsuarios.length]; for (int i=0; i<vetorUsuarios.length; i++) vetorReverso[i] = vetorUsuarios[vetorUsuarios.length-i-1]; vetorUsuarios = vetorReverso; } ordemCrescente = !ordemCrescente; } }
Na tabela (no meu caso tabelaUsuario) você adiciona o listener abaixo:
tableHeaderUsuario.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent e) { UsuarioTableModel modelo = (UsuarioTableModel) tabelaUsuario.getModel(); // Ordenando tabela de acordo com a coluna clicada modelo.ordenarTabela(tableHeaderUsuario.columnAtPoint(tableHeaderUsuario.getMousePosition())); tabelaUsuario.invalidate(); } });
Responder
Clique aqui para fazer login e interagir na Comunidade :)