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

Insertar row en tabla ordenada

Estas en el tema de Insertar row en tabla ordenada en el foro de Java en Foros del Web. Hola a todos, tengo una tabla en la que me he definido una clase con su modelo de datos. La tabla he puesto que se ...
  #1 (permalink)  
Antiguo 18/06/2008, 01:13
 
Fecha de Ingreso: noviembre-2007
Mensajes: 121
Antigüedad: 16 años, 5 meses
Puntos: 0
Insertar row en tabla ordenada

Hola a todos,

tengo una tabla en la que me he definido una clase con su modelo de datos. La tabla he puesto que se pueda ordenar por columnas haciendo table.setRowSorter(new TableRowSorter(mymodel)); En la aplicación tengo dos botones uno para añadri una nueva fila y otro para borrar una fila. Cuando borro una fila, se hace bien, porque cojo las filas selectionadas y convierto los indices de la vista (ordenada) a indices del modelo(fila[i]=((ContactosJTable)Tabla).convertRowIndexToModel(f ila[i]);). También se modifica bien, pues las modificaciones se hacen cuando se llama a setValue del modelo e imagino que de llamará con los indices adecuados.

El problema lo tengo a añadir una fila, me salta la siguiente excepción:

Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Invalid range
at javax.swing.DefaultRowSorter.checkAgainstModel(Unk nown Source)
at javax.swing.DefaultRowSorter.rowsInserted(Unknown Source)
at javax.swing.JTable.notifySorter(Unknown Source)
at javax.swing.JTable.sortedTableChanged(Unknown Source)
at javax.swing.JTable.tableChanged(Unknown Source)
at javax.swing.table.AbstractTableModel.fireTableChan ged(Unknown Source)
at javax.swing.table.AbstractTableModel.fireTableRows Inserted(Unknown Source)
at view.ContactosJTablaModel.addNewRow(ContactosJTabl aModel.java:152)...........................


La verdad es que no se, cuando tengo la tabla ordenada y le doy a añadir, en mi modelo lo que hago es añadir una fila vacía al final del modelo de los datos, el problema me imagino que será que en la vista de la tabla ordenada no se ha añadido esa fila, y la verdad es que no se como corregir eso.

¿Me pueden ayudar por favor?
Muchas gracias
  #2 (permalink)  
Antiguo 18/06/2008, 01:50
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Insertar row en tabla ordenada

¿Llamas tú a "fireTableRowsInserted"? Si es así, ¿Le estas pasando la posicion de la fila que has insertado? Parece que que la la clase que ordena esta comprobando mal las filas insertadas.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #3 (permalink)  
Antiguo 18/06/2008, 02:31
 
Fecha de Ingreso: noviembre-2007
Mensajes: 121
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Insertar row en tabla ordenada

Sí, yo despues de insertar una fila en el modelo llamo a fireTableRowsInserted para que se actualice la vista de la tabla, basicamente lo que hago cuando añado una nueva fila es lo siguiente

filanew.add("#"+ (indiceMayor+1) );
filanew.add(null);
filanew.add(null);
filanew.add(null);
filanew.add(null);
filanew.add(null);
filanew.add(null);
filanew.add(null);
filanew.add(null);
filanew.add(null);
filanew.add(null);
filanew.add(null);

rows.add(filanew);
this.fireTableRowsInserted( rows.size(),rows.size() );

donde rows es un vector de vectores que contiene los datos de mi tabla, con lo cual inserto al final del modelo. De la parte de ordenacion yo no implementao nada, suponia q lo hacia x defecto, pero no eniendo bien como funciona, ¿Como se supone q se debe insertar una nueva fila en el modelo ordenado? yo tengo definido como insertarlo en mi modelo de tabla, que es al final, pero ¿cómo indico al modelo de ordenacion que yo no he implmentado como insertar esa fila en su modelo?¿Se llama al rownserted de ese modelo cuando llamas a fireTableRowsInserted supongo, pero claro le paso la ultima fila añadida que en el modelo no existe aún, no se,

¿podrian darme alguna idea?
  #4 (permalink)  
Antiguo 18/06/2008, 02:43
 
Fecha de Ingreso: noviembre-2007
Mensajes: 121
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Insertar row en tabla ordenada

Buah la solución estaba delante de mis ojos y no la veía, había que pasarla rows.size()-1. No se porque cuando no tenia lo de ordear tablas funcinaba bien y ahora tenía que modificar eso, pero es lógico, que en java los vectores empiezan en 0.

Saludos y gracias
  #5 (permalink)  
Antiguo 18/06/2008, 03:04
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Insertar row en tabla ordenada

A veces solo hace falta intentar explicar las cosas para darnos cuenta nosotros mismos. Me alegro que ya te funcione.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
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 04:22.