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