Olá pessoal,
estou me batendo para ordenar uma coluna TIMESTAMP de uma table;
encontrei vários exemplos, mas quando o campo é data complica tudo;
ordena apenas pelo dia, ignorando o mês+ano;
o erro acontece tanto no DefaultTableModel quanto no AbstractTableModel;
quando aciono através de um JButton funciona:
private JButton getBtCancelarbx1() {
....
btCancelarbx1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if(ascending==true){
ascending=false;
} else {
ascending=true;
}
model.ordenarPorEmissao(ascending);
}
});
Na rotina abaixo eu crio a Lista:
ResultSet rsgeral=conexao.setExeQuery(selecao);
try {
String dataemissao = null;
lista.clear();
lista = new ArrayList<Produto>();
rsgeral.beforeFirst();
while (rsgeral.next()) {
// formata data
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date dt = null;
try {
dt = sdf.parse(rsgeral.getString("com_emissao"));
sdf = new SimpleDateFormat("dd/MM/yyyy");
dataemissao = sdf.format(dt);
} catch (ParseException e) {
e.printStackTrace();
}
// formata valor
DecimalFormat df = new DecimalFormat("##,###.00");
String valor = df.format(rsgeral.getDouble("com_valorcomissao"));
lista.add(new Produto(rsgeral.getString("com_codigo"),rsgeral.getString("com_ctrlparcela"),
rsgeral.getString("tbc_codigo"),rsgeral.getString("codrep"),
rsgeral.getString("razaosocial"),valor,dataemissao,
rsgeral.getString("com_observacao"),false));
}
} catch (SQLException e) {
e.printStackTrace();
}
model = new ProdutoTableModel(lista);
//atribui o modelo a table
gradetable.setModel(model);
model.ordenarPorEmissao(ascending); // a variável "ascending" varia entre true:false
E abaixo a função Comparator:
public void ordenarPorEmissao(final boolean ascending) {
Collections.sort(produtos, new Comparator<Produto>() {
public int compare(Produto o1, Produto o2) {
int xreturn=0;
String ab = null; String ba = null;
SimpleDateFormat sdf1 = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
Date dt;
try {
dt = sdf1.parse(o1.getCol6());
ab = sdf2.format(dt);
} catch (ParseException e) {e.printStackTrace();
}
try {
dt = sdf1.parse(o2.getCol6());
ba = sdf2.format(dt);
} catch (ParseException e) {e.printStackTrace();
}
if(ascending){
xreturn=ab.compareTo(ba);
} else {
xreturn=ba.compareTo(ab);
}
return xreturn;
}
});
fireTableDataChanged();
}
O que pode estar errado?
Criei uma rotina para usar o DoClick quando o handleClickEvent fosse acionado, ou seja,
quando acontecer o click na coluna da data, o JButton é “apertado”, e claro que funcionou, mas
isso é muito ruim;