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

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

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){

}
}

Imagen de javiher

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.