2009-07-13 28 views
14

Quiero eliminar algunas filas de una JTable. ¿Cómo puedo hacerlo?¿Cómo eliminar una fila de JTable?

+6

Consejo: si se le explica lo que ya han intentado, y lo que en línea tutoriales que ha leído, la gente va a estar más dispuestos a ayudarte. O da un código de muestra y dinos qué bit no funciona. Lea esto si aún no lo ha hecho: http://java.sun.com/docs/books/tutorial/uiswing/components/table.html –

Respuesta

3

Una JTable normalmente forma la parte Vista de una implementación de MVC. Querrá eliminar filas de su modelo. JTable, que debería estar atento a estos cambios, se actualizará para reflejar esta eliminación. Por lo tanto, no encontrará removeRow() o similar como método en JTable.

+0

gracias por la ayuda, pero quiero saber cómo eliminar filas de el modelo de tabla, no estoy obteniendo ningún método. –

+1

Lea detenidamente cosas como: http://java.sun.com/docs/books/tutorial/uiswing/components/table.html – dave

+0

En resumen, crea un modelo de tabla personalizado. JTable no almacena las filas, sino que las delega a TableModel. Puede subclasificar de AbstractTableModel si lo desea. Llame a fireTableRowsDeleted() cada vez que borre filas. – dave

3

Mira el DefaultTableModel para un modelo simple que se puede utilizar:

http://java.sun.com/javase/6/docs/api/javax/swing/table/DefaultTableModel.html

Esto amplía la AbstractTableModel, pero debería ser suficiente para los propósitos básicos. Siempre puedes extender AbstractTableModel y crear el tuyo propio. Asegúrese de configurarlo también en la JTable.

http://java.sun.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html

Mira el tutorial básico Sun para obtener más información sobre el uso del JTable con el modelo de tabla:

http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#data

33

Con el fin de eliminar una fila de un JTable, tiene que quitar la fila de destino del TableModel subyacente. Si, por ejemplo, su TableModel es una instancia de DefaultTableModel, puede eliminar una fila de la siguiente manera:

((DefaultTableModel)myJTable.getModel()).removeRow(rowToRemove); 
+0

gracias por la ayuda, pero he usado este método y no está funcionando. en realidad, mi JTable está usando el modelo de tabla LocationTable (creado por mí mismo) modelo de tabla abstracta extendind así que cuando estoy usando el método removeRow (i) está dando error ya que "no puedo resolver removeRow()" ... qué alternativa usaré ... –

+4

Bueno si creó su propio TableModel personalizado, entonces usted es responsable de crear su propio método "removeRow". Mire el código fuente del DefaultTableModel para ver cómo se hace esto. La solución fácil es usar el DefaultTableModel. ¿Por qué crees que necesitas crear un TableModel personalizado? Hasta que comprenda los conceptos básicos del uso de modelos, use los valores predeterminados proporcionados. – camickr

4

La forma correcta de aplicar un filtro a un JTable es a través de la interfaz añadió a una TableRowSorter RowFilter. Usando esta interfaz, la vista de un modelo se puede cambiar sin cambiar el modelo subyacente. Esta estrategia preserva el paradigma Modelo-Vista-Controlador, mientras que la eliminación de las filas que desea ocultar del modelo en sí rompe el paradigma al confundir su separación de preocupaciones.

8

Si necesita una solución de trabajo simple, intente con DefaultTableModel.

Si ha creado su propio modelo de tabla, que extiende AbstractTableModel, también debe implementar el método removeRow(). La implementación exacta depende de la estructura subyacente, que haya utilizado para almacenar datos.

Por ejemplo, si ha utilizado vector, entonces puede ser algo como esto:

public class SimpleTableModel extends AbstractTableModel { 
    private Vector<String> columnNames = new Vector<String>(); 
    // Each value in the vector is a row; String[] - row data; 
    private Vector<String[]> data = new Vector<String[]>(); 

    ... 

    public String getValueAt(int row, int col) { 
     return data.get(row)[col]; 
    } 

    ... 

    public void removeRow(int row) { 
     data.removeElementAt(row); 
    } 
} 

Si ha utilizado la lista, entonces sería muy parecidos:

// Each item in the list is a row; String[] - row data; 
List<String[]> arr = new ArrayList<String[]>(); 

public void removeRow(int row) { 
    data.remove(row); 
} 

HashMap :

//Integer - row number; String[] - row data; 
HashMap<Integer, String[]> data = new HashMap<Integer, String[]>(); 

public void removeRow(Integer row) { 
    data.remove(row); 
} 

Y si está utilizando matrices como éste

String[][] data = { { "a", "b" }, { "c", "d" } }; 

, entonces no tiene suerte, porque no hay forma de eliminar dinámicamente los elementos de las matrices. Puede tratar de usar matrices almacenando por separado algunas banderas que notifiquen qué filas se borran y cuáles no, o de alguna otra forma desviada, pero aconsejaría que no lo haga ... Eso introduciría una complejidad innecesaria, y de hecho solo sería resolver un problema creando otro. Esa es una forma segura de terminar con here. Pruebe una de las formas anteriores para almacenar los datos de su tabla en su lugar.

Para una mejor comprensión de cómo funciona esto, y qué hacer para hacer su propio modelo de trabajo correctamente, creo firmementeaconsejo que consulte a Java Tutorial, DefaultTableModel API y es source code.

3

mmm es muy simples chicos

for(int i = model.getRowCount() - 1; i >= 0; i--) 
{ 
    model.removeRow(i); 
} 
+1

Nada como millones de notificaciones en la mañana ;-) – greenoldman

Cuestiones relacionadas