Olá amigos,
Eu necessitava implementar um "RowSorter" para uma "JTable" mas tinha um problema: uma das colunas possuia um valor "double", mas que exibia ela como "String" para poder aplicar uma formatação.
Dei uma procurada na internet e vi que não tinha muita coisa a respeito, resolvi então após ter conseguido fazer, escrever esta dica.
A maior base eu tirei daqui: [url]http://java.sun.com/docs/books/tutorial/uiswing/components/table.html[/url]
private DefaultTableModel getTabelaModel() {
return new javax.swing.table.DefaultTableModel(
new Object [][] { { null, null, null } },
new String [] {
"", "Vencimento", "Valor"
}
) {
Class[] types = new Class [] {
ImageIcon.class, Date.class, String.class
};
@Override
public Class getColumnClass(int columnIndex) { return types [columnIndex]; }
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) { return false; }
};
}
public String formatoNumerico(double valor) {
NumberFormat formato = NumberFormat.getInstance();
formato.setMinimumFractionDigits(2);
formato.setMaximumFractionDigits(2);
return formato.format(valor);
}
public Double formatoDouble (String valor) throws ParseException {
Double resultado = null;
resultado = NumberFormat.getInstance().parse(valor).doubleValue();
return resultado;
}
Comparator<String> comparator = new Comparator<String>() {
public int compare(String s1, String s2) {
Double valor1 = null;
Double valor2 = null;
try {
valor1 = formatoDouble(s1);
valor2 = formatoDouble(s2);
} catch (Exception e) {
e.printStackTrace();
}
return valor1.compareTo(valor2);
}
};
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(tabelaDesejada.getModel());
sorter.setComparator(2, comparator);
tabelaDesejada.setRowSorter(sorter);
Bom é isso, para mim funcionou e ficou do jeito desejado.
Abraços,
Marcos Antonio Campos Jordão''