DataTable Ordenada
Alguem sabe como fazer ordenação pelas colunas de uma DataTable ?
Uso JPA
Obrigado
Uso JPA
Obrigado
Mazzi
Curtidas 0
Respostas
Anonymous
15/09/2008
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();
}
});GOSTEI 0