2011-01-02 14 views
45

¿Cómo puedo borrar el contenido de la JTable utilizando Java ..cómo borrar JTable

+0

Comprobar esta pregunta: http://stackoverflow.com/questions/4439210/deleting-datas-in-the-table-in-gui/4439297#4439297 –

+0

Dupe de: http://stackoverflow.com/questions/3879610/clear-contents-of-a-jtable –

Respuesta

12

Básicamente, depende de la TableModel que está utilizando para su JTable. Si está utilizando el DefaultTableModel a continuación, puede hacerlo de dos maneras:

DefaultTableModel dm = (DefaultTableModel)table.getModel(); 
dm.getDataVector().removeAllElements(); 
dm.fireTableDataChanged(); // notifies the JTable that the model has changed 

o

DefaultTableModel dm = (DefaultTableModel)table.getModel(); 
while(dm.getRowCount() > 0) 
{ 
    dm.removeRow(0); 
} 

consulte el Javadoc de DefaultTableModel para más detalles

+3

Recuerde disparar un evento de tabla si cambia el vector de datos subyacente; de ​​lo contrario, la JTable no tendrá ni idea de que ha cambiado ... – dacwe

+1

-1, ambas sugerencias son incorrectas. El primero, por el motivo comentado anteriormente. El segundo saltará filas porque la variable i sigue incrementándose a medida que elimina cada fila. Si desea crear un bucle, simplemente siga eliminando la fila 0, hasta que no haya más filas. Sin embargo, Carlos publicó la solución más simple. – camickr

+0

Camickr, tienes razón. Cambié mi respuesta para solucionar estos problemas. Aún la solución de Carlos es más fácil de implementar. –

1

Depende del modelo que está utilizando para su JTable.

54

Debe eliminar los datos del TableModel utilizados para la tabla.

Si usa DefaultTableModel, simplemente configure el recuento de filas en cero. Esto eliminará las filas y activará el TableModelEvent para actualizar la GUI.

JTable table; 
… 
DefaultTableModel model = (DefaultTableModel) table.getModel(); 
model.setRowCount(0);

Si está utilizando otra TableModel, por favor, compruebe la documentación.

+0

Solo añadiendo esto aquí ... Tuve que llamar a 'table.revalidate();' después de configurar el recuento de filas a cero para ver el cambio inmediatamente; de ​​lo contrario, no vi el cambio hasta que hice clic en 'JTable '. – Sakiboy

+0

@ Jim-Dingo funciona bien sin 'revalidate()' para mí: [ejemplo simple] (http://pastebin.com/iDgLeKPk) El 'DefaultTableModel' informa a la vista cuando se cambiaron los datos - verifique el código de' setNumRows (int) ', llama a' fireTableRowsDeleted' si se reduce el recuento de filas. –

5

Tenía que conseguir una mesa limpia sin columnas. He hecho lo siguiente:

jMyTable.setModel(new DefaultTableModel()); 
+0

solución rápida y efectiva, pero también elimina el encabezado. Debería ser mejor si hay una opción para no eliminar el encabezado. Alguien en otra publicación sugirió eliminar todas las filas una por una. Eso mantendría el encabezado –

1

Esta es la forma más rápida y fácil que he encontrado;

while (tableModel.getRowCount()>0) 
      { 
      tableModel.removeRow(0); 
      } 

Esto despeja la mesa y la deja lista para nuevos datos.

1

Creo que quisiste decir que quieres borrar todas las celdas de la jTable y hacer que sea como una nueva jTable en blanco. Por ejemplo, si su tabla es myTable, puede hacer lo siguiente.

DefaultTableModel model = new DefaultTableModel(); 
myTable.setModel(model); 
1

Si usamos tMOdel.setRowCount(0); podemos obtener la tabla vacía.

DefaultTableModel tMOdel = (DefaultTableModel) jtableName.getModel(); 
tMOdel.setRowCount(0); 
+0

Por favor edite con más información. Se desalientan las respuestas de solo código y "prueba esto", ya que no contienen contenido que se pueda buscar y no explican por qué alguien debe "probar esto". Hacemos un esfuerzo aquí para ser un recurso para el conocimiento. – abarisone

0
((DefaultTableModel)jTable3.getModel()).setNumRows(0); // delet all table row 

intenta esto: