Ver Mensaje Individual
  #6 (permalink)  
Antiguo 28/12/2010, 09:25
tronco020
 
Fecha de Ingreso: noviembre-2010
Ubicación: Tandil
Mensajes: 79
Antigüedad: 14 años, 1 mes
Puntos: 3
Respuesta: Ordenar columna JTable

De nuevo yo. Me autorespondo. Logré ordenar los datos. En una misma tabla tengo fechas (en la columna 5) e importes (en la columna 6). Cuando creo la tabla, desde NetBeans, hago las fechas como LONG y lo almaceno de la siguiente forma: YYYYMMDD; y los importes como DOUBLE. Ahora bien... las fechas debo mostrarlas como DD/MM/YYYY y los importes como #,###,###.## pero el NB me muestra los DOUBLES como #######.##
Para solucionar esto, creé 2 clases: DateCellRenderer y DecimalCellRenderer y en ambas redefino el método getTableCellRendererComponent de la siguiente forma:

Código Javascript:
Ver original
  1. public class DateCellRenderer extends DefaultTableCellRenderer{
  2.     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
  3.         super.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column );
  4.         String fecha = value.toString().substring(6) + "/" + value.toString().substring(4, 6) + "/" + value.toString().substring(0, 4);
  5.         this.setText(fecha);
  6.         return this;
  7.     }
  8. }
  9.  
  10. public class DecimalCellRenderer extends DefaultTableCellRenderer{
  11.     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
  12.         super.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column );
  13.         String importe = value.toString();
  14.         int pos = importe.length();
  15.         if (importe.charAt(pos - 2) == '.'){
  16.             importe = importe + "0";
  17.             pos = pos - 5;
  18.         }
  19.         else
  20.             pos = pos - 6;
  21.         while (pos > 0){
  22.             importe = importe.substring(0, pos) + "," +  importe.substring(pos);
  23.             pos = pos - 3;
  24.         }
  25.         this.setHorizontalAlignment(SwingConstants.RIGHT);
  26.         this.setText(importe);
  27.         return this;
  28.     }
  29. }

Y luego hago las llamadas correspondientes:

Código Javascript:
Ver original
  1. TableColumnModel m = tbl_filtros.getColumnModel();
  2. m.getColumn(5).setCellRenderer(new DateCellRenderer());
  3. m.getColumn(6).setCellRenderer(new DecimalCellRenderer());

Espero haber aclarado el tema. Muchas gracias a todos. Saludos