Foros del Web » Programación para mayores de 30 ;) » Java »

Ordenar columna JTable

Estas en el tema de Ordenar columna JTable en el foro de Java en Foros del Web. Hola, amigos javeros. Tengo un problema para ordenar una columna especial de un JTable. Esta columna es de tipo String, pero contiene números formateados al ...
  #1 (permalink)  
Antiguo 22/12/2010, 16:32
 
Fecha de Ingreso: noviembre-2010
Ubicación: Tandil
Mensajes: 79
Antigüedad: 13 años, 5 meses
Puntos: 3
Pregunta Ordenar columna JTable

Hola, amigos javeros.

Tengo un problema para ordenar una columna especial de un JTable. Esta columna es de tipo String, pero contiene números formateados al estilo de 1,000,000.00 y cuando le doy clic en la cabecera para ordenar, me ordena los datos como String así:

1,000,000.00
1,000.10
100,000.00
115.00
200.00
325.00
etc.

Lo que yo estoy necesitando es que me los ordene asi:

1,000,000.00
100,000.00
1,000.10
325.00
200.00
115.00
etc.

Es decir, por valor. Yo sé que en este caso NetBeans hace las cosas como corresponde, y que el difícil soy yo. Pero necesito los números sí o sí en ese formato.

¿Alguien podrá darme una mano? Muchas gracias de antemano !!!
  #2 (permalink)  
Antiguo 22/12/2010, 16:43
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 4 meses
Puntos: 51
Respuesta: Ordenar columna JTable

Tienes que especificar en el modelo la clase tipo númerica o format para el row, para que lo reconozca como tal.
  #3 (permalink)  
Antiguo 23/12/2010, 09:21
 
Fecha de Ingreso: noviembre-2010
Ubicación: Tandil
Mensajes: 79
Antigüedad: 13 años, 5 meses
Puntos: 3
Respuesta: Ordenar columna JTable

OK, gracias, pero si hago eso me representa los números en formato 1000000.0 y no quiero que se vean así. Yo necesito que se vean asi: 1,000,000.00. Y para eso necesito que sea un String.
  #4 (permalink)  
Antiguo 23/12/2010, 13:57
wjr
 
Fecha de Ingreso: diciembre-2010
Mensajes: 32
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Ordenar columna JTable

Cita:
Iniciado por tronco020 Ver Mensaje
OK, gracias, pero si hago eso me representa los números en formato 1000000.0 y no quiero que se vean así. Yo necesito que se vean asi: 1,000,000.00. Y para eso necesito que sea un String.
Con format creería que lo podés hacer con el formato que vos querés.
  #5 (permalink)  
Antiguo 23/12/2010, 15:56
 
Fecha de Ingreso: noviembre-2010
Ubicación: Tandil
Mensajes: 79
Antigüedad: 13 años, 5 meses
Puntos: 3
Respuesta: Ordenar columna JTable

Perfecto, pero no conozco esto del format. ¿Me podrán dar algunos tips de como usarlo? Muchas gracias !!!
  #6 (permalink)  
Antiguo 28/12/2010, 09:25
 
Fecha de Ingreso: noviembre-2010
Ubicación: Tandil
Mensajes: 79
Antigüedad: 13 años, 5 meses
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

Etiquetas: jtable, netbeans, numeros, ordenar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:43.