Ordenar coluna de uma JXTable?

0 respostas
fernandopaiva

Salve galera

Tenho uma JXTable com colunas Data e Valor de Produtos.

data produto qtd valor(R$)
01/03/2012 AguaMineral 5 1,50
27/02/2012 CocaCola 1L 3 3,50
01/02/2012 Guarana 1L 2 3,50
17/02/2012 SucoDelVale 10 4,00
18/01/2012 Suco Tang 3 1,00

Quando eu exibo isso no JXTable ele ja me traz a funcao de ordenar automaticamente, porem nao funciona 100%.
Com valores por exemplo, se eu mando ordenar ele nao ordena do maior para o menor corretamente, no exemplo deveria ser o valor 1,00 primeiro e o ultimo o 4,00…mas isso nao acontece. A mesma coisa para datas maior e menor.
Acho q é alguma coisa com SimpleDateFormat e DecimalFormat, ate msm pq quando exibo o valor como BigDecimal sem formatar com DecimalFormat funciona tranquilamente.
O mesmo acontece para a coluna de quantidade(qtd). Quando mando ordenar do maior para o menor, exibe certinho o 2 ja para o maior nao exibe o 10, exibe o 5.

aqui como estou tentando

// AbstractTableModel
public class ProdutosTableModel extends AbstractTableModel{
    private final DecimalFormat fCod = new DecimalFormat("000");
    private final DecimalFormat fValor = new DecimalFormat("###,###,##0.00");
    private List<Produtos> lista;
    private String[] colunas = {"Id","Data","Produto","Qtd.","Valor(R$)"};
    
    
    public ProdutosTableModel(){
        lista = new ArrayList<Produtos>();
    }
    
    public ProdutosTableModel(List<Produtos> lp){
        this();
        lista.addAll(lp);
    }
    

    @Override
    public int getRowCount() {
        return lista.size();
    }

    @Override
    public int getColumnCount() {
        return colunas.length;
    }
    
    public String getColumnName(int column){
        if(colunas[column] == "Id"){
            return "Id";
        }else if(colunas[column] == "Data"){
            return "Data";
        }else if(colunas[column] == "Produto"){
            return "Produto";
        }else if(colunas[column] == "Qtd."){
            return "Qtd.";
        }else if(colunas[column] == "Valor(R$)"){
            return "Valor(R$)";
        }
        return "";
    }
    
    public Class<?> getColumnClass(int columnIndex) {
	return Object.class;
    }
        

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Produtos p = lista.get(rowIndex);
        switch(columnIndex){
            case 0: return fCod.format(p.getCod());
            case 1: return formataData(p.getData());
            case 2: return p.getNome();
            case 3: return p.getQuant();
            case 4: return fValor.format(p.getValor());
            default: return new String();
        }
    }    


public String formataData(String data){
        String s = null;
        
        try{
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            Date d = df.parse(data);
            df = new SimpleDateFormat("dd/MM/yyyy");
            s = df.format(d);
        }catch(ParseException e){
            JOptionPane.showMessageDialog(null, e.getLocalizedMessage(), "Error", JOptionPane.ERROR_MESSAGE);
        }
        return s;
    }
}



//Beans(POJO)
public class Produtos { 
    private int cod;
    private String nome;
    private int quant;
    private String data;
    private BigDecimal valor;
 
    public Produtos(int id, String p, int q, String data, BigDecimal valor) {
        this.cod = id;
        this.nome = p;
        this.quant = q;
        this.data = data;
        this.valor = valor;
    }
    
 
    public int getCod() {
        return cod;
    }
 
    public void setCod(int cod) {
        this.cod = cod;
    }
 
    public String getNome() {
        return nome;
    }
 
    public void setNome(String nome) {
        this.nome = nome;
    }
 
    public int getQuant() {
        return quant;
    }
 
    public void setQuant(int quant) {
        this.quant = quant;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public BigDecimal getValor() {
        return valor;
    }

    public void setValor(BigDecimal valor) {
        this.valor = valor;
    }
}



//JDialog q exibe
public ExibeProdutos extends JDialog{

public ExibeProdutos(){
       defineTabela();
}

public void defineTabela(){
        List<Produtos> lista = new ArrayList<Produtos>();
        
        lista.add(new Produtos(1, "CocaCola", 10, "2012-01-05", new BigDecimal("22.00")));
        lista.add(new Produtos(2, "Guarana", 11, "2012-01-07", new BigDecimal("31.00")));
        lista.add(new Produtos(3, "Fanta", 9, "2012-01-31", new BigDecimal("14.00")));
        lista.add(new Produtos(4, "Suco", 8, "2012-02-16", new BigDecimal("22.00")));
        lista.add(new Produtos(5, "Salgado", 7, "2012-03-01", new BigDecimal("35.00")));
        lista.add(new Produtos(6, "Pizza", 6, "2012-06-07", new BigDecimal("45.00")));
        lista.add(new Produtos(7, "Carne", 5, "2012-07-12", new BigDecimal("55.00")));
        lista.add(new Produtos(8, "Leite", 4, "2012-08-27", new BigDecimal("5.00")));
        lista.add(new Produtos(9, "Muzzarela", 1, "2012-06-17", new BigDecimal("50.00")));
        model = new ProdutosTableModel(lista);
        tabela.setModel(model);
        
    }

Como eu faco pra ordenar as colunas ?

obrigado

Criado 1 de março de 2012
Respostas 0
Participantes 1