Table - ordenar coluna data (timestamp)

5 respostas
ricinovacoes

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;

5 Respostas

F

em teoria se tu comparar data com data (sem o simple date format) ja deveria ordenar…
caso nao funcione use os milisegundos da datae compare como int …

ricinovacoes

olá filipechaves, agradeço a sua ajuda;

quando elimino a função SimpleDateFormat a data aparece
no formato “2010-08-31 00:00:00”, e desta maneira a
ordenação acontece;
o problema é o formato; o engraçado quando faço uma simulação
com JButton (DoClick) funciona legal!

O que está errado??

F

agora eu nao consigo criar um caso de teste XD hoje a noite tentarei.

faça 2 “get” para a data, ordene por um e exiba o outro XD

ricinovacoes

Oi filipechaves,

coloquei duas colunas com datas:
1- 2010-08-18 00:00:00
2- 10/08/2010

consigo exibir as duas datas, mas a ordenação  acontece

quando clico na coluna 2010-08-18 00:00:00;

ou seja, não sei fazer a rotina ordenar um e exibir outro;

qualquer ajuda agradeço muito;

F

pesquise sobre cell renderer na jtable, assim que eu tiver um tempo ajudo com algo masi concreto XD desculpe

Criado 13 de dezembro de 2010
Ultima resposta 14 de dez. de 2010
Respostas 5
Participantes 2