Error al hacer un click en un boton
Tengo un jTable y un conjunto de controles de texto, al seleccionar una fila en el jTable hago una consulta a una tabla de la BD para traerme el registro del código seleccionado y los datos se muestrar en los controles de texto, hasta este punto todo va bien.
Tengo un boton Guardar para añadir registros a la tabla de la BD este botón ejecuta el método LimpiarTabla() (Limpiar las filas de la tabla.
Posteriormente tengo otro metodo llamado Listar que me llena el jtable a partir de un select * from.
Se preguntan donde esta el error, al seleccionar un registro del jTable y luego al darle a un botón me manda este error.
Agradeceria su ayuda
Gracias
- Inicie sesión o regístrese para enviar comentarios
con eso borras el contenido
con eso borras el contenido de tu tabla (todas las filas)
while (tabla.getRowCount()!=1){
((DefaultTableModel)tabla.getModel()).removeRow(0);
}
Asi lo esta haciendo
Resulta que si selecciono una fila de la jtable y luego presiono el boton que tiene el código de borrado, muestra este error en la consola Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.get(ArrayList.java:324)
at ejemplo.jtable.ABMCiudadCombinado.ActualizarTextBoxes(ABMCiudadCombinado.java:573)
at ejemplo.jtable.ABMCiudadCombinado$11.valueChanged(ABMCiudadCombinado.java:534)
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:167)
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:147)
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:194)
at javax.swing.DefaultListSelectionModel.removeIndexInterval(DefaultListSelectionModel.java:660)
at javax.swing.JTable.tableRowsDeleted(JTable.java:4497)
at javax.swing.JTable.tableChanged(JTable.java:4400)
at javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:280)
at javax.swing.table.AbstractTableModel.fireTableRowsDeleted(AbstractTableModel.java:245)
at ejemplo.jtable.CiudadesJTableModel.removeRow(CiudadesJTableModel.java:42)
at ejemplo.jtable.ABMCiudadCombinado$6.actionPerformed(ABMCiudadCombinado.java:346)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6267)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6032)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Tengo que darle doble click
Tengo que darle doble clic para que se borre el contenido, pero al dar el primer clic aparece este código de error.
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.get(ArrayList.java:324)
at ejemplo.jtable.ABMCiudadCombinado.ActualizarTextBoxes(ABMCiudadCombinado.java:573)
at ejemplo.jtable.ABMCiudadCombinado$11.valueChanged(ABMCiudadCombinado.java:534)
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:167)
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:147)
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:194)
at javax.swing.DefaultListSelectionModel.removeIndexInterval(DefaultListSelectionModel.java:660)
at javax.swing.JTable.tableRowsDeleted(JTable.java:4497)
at javax.swing.JTable.tableChanged(JTable.java:4400)
at javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:280)
at javax.swing.table.AbstractTableModel.fireTableRowsDeleted(AbstractTableModel.java:245)
at ejemplo.jtable.CiudadesJTableModel.removeRow(CiudadesJTableModel.java:42)
at ejemplo.jtable.ABMCiudadCombinado$6.actionPerformed(ABMCiudadCombinado.java:346)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6267)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6032)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
¿pero cuál es la idea?
¿Borrar la fila que seleccionaste o borrar todo el contenido del JTable?
Borrar todas las filas con su contenido
Borrar todas las filas con su contenido, y después de añadir un nuevo registro mostrar todos los registros en la tabla de la BD
Yo entiendo esto
primero llenas tu JTable atraves de una consulta a tu BD
seleccionas un registro y este se pinta supongo en unos JText o algo parecido
luego quieres guardar unos datos y que se vuelva a llenar tu JTable
si la idea es asi mas o menos
dices que ya tienes la parte de llenar tu JTable
bueno yo haría lo siguiente boton guardar ----> manda llamar metodo limpiar( )
con esto lo que logras es borrar el contenido de la tabla pero no nada mas el contenido tambien booras las celdas es decir te chutas todo
lo que necesitarias despues es "volver a inicialiar" la fila
Algo mas o menos asi
new Integer(1),0,0 ---> le dices ponme un 1 en la celda 0,0 ó "",0,1 -----> le dices inicializa la celda en limpio a la derecha de 1
entonces tu metodo listar tendra que hacer algo como lo de arriba
Que de diferencia hay entre usar setValueAt o addRow
private void Listar() {
String sql = "SELECT * FROM categorias";
int row=0;
try {
ControladorBD.addSql(sql);
ControladorBD.execute();
while(ControladorBD.finRecordSet()){
Object[] nuevaFila = {
ControladorBD.getInt("cat_codigo").toString(),
ControladorBD.getString("cat_nombre") };
dtm.addRow(nuevaFila);
//Usando serValuAt no me funciono
/*String codigo=ControladorBD.getInt("cat_codigo").toString();
String categoria = ControladorBD.getString("cat_nombre");
jTable1.getModel().setValueAt(codigo,row,0);
jTable1.getModel().setValueAt(categoria,row,1);
row=row+1;*/
}
}
catch (Exception e){
}
}
Hola http://download.oracle.c
Hola
http://download.oracle.com/javase/7/docs/api/javax/swing/table/TableModel.html#setValueAt(java.lang.Object, int, int)
http://download.oracle.com/javase/7/docs/api/javax/swing/table/DefaultTableModel.html#addRow(java.lang.Object[])
Saludos
Gracias por aquí hilo cerrado
Gracias cierro el hilo por que el error que tengo no pertenece a esta pregunta la realizare en otro pregunta.