Tenha uma classe que extende de AbstractTableModel
package br.com.systech.classes.tablemodel;
import static br.com.systech.classes.utilitario.Biblioteca.*;
import br.com.systech.classes.beans.Produto;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
public class ProdutoTableModel extends AbstractTableModel {
private List<Produto> pList = new ArrayList<>();
private final String[] colunas = {"", "ID", "Descricao", "Preço", "Saldo"};
Class[] types = new Class[]{Boolean.class, Integer.class, String.class, BigDecimal.class, BigDecimal.class};
@Override
public Class<?> getColumnClass(int i) {
return types[i];
}
@Override
public boolean isCellEditable(int linha, int coluna) {
return coluna == 0;
}
@Override
public String getColumnName(int i) {
return colunas[i];
}
@Override
public int getRowCount() {
return pList.size();
}
@Override
public int getColumnCount() {
return colunas.length;
}
@Override
public Object getValueAt(int linha, int coluna) {
switch (coluna) {
case 0:
return pList.get(linha).isStatus();
case 1:
return pList.get(linha).getCodigo();
case 2:
return pList.get(linha).getDescricao();
case 3:
return bigDecimalToString((BigDecimal) pList.get(linha).getPreco_venda());
case 4:
return isFracaoIgualZero(pList.get(linha).getSaldo()) ? pList.get(linha).getSaldo().setScale(0, RoundingMode.HALF_UP).toString() : bigDecimalToString(pList.get(linha).getSaldo());
}
return null;
}
@Override
public void setValueAt(Object c, int linha, int coluna) {
switch (coluna) {
case 0:
pList.get(linha).setStatus((boolean) c);
break;
}
}
public void addRow(Produto iv) {
this.pList.add(iv);
this.fireTableDataChanged();
}
public void addList(List<Produto> ivList) {
this.pList = ivList;
this.fireTableDataChanged();
}
public List<Produto> getList() {
return this.pList;
}
}
Tenha uma JTable que usa essa classe e exibe os produtos na tela. Mas a ordenação da coluna 3 e 4 não funcionam pois o valor deles é BigDecimal porem para exibir eu uso um metodo bigDecimalToString() que formata em “real” em vez de aparecer 1.00 aparece 1,00.
O correto para ordenação seria
1,00
2,60
10,40
Alguém sabe alguma solução? Já procurei em vários lugares mas não achei algo parecido.