2012-05-02 29 views
13

Quiero eliminar todas las filas de DefaultTable. Encontré dos formas comunes de eliminarlas en Internet, pero ninguna de ellas funciona en mi caso porque esos métodos no existen en mi DefaultTableModel .I preguntarse por qué: S. Mi código para usar DefaultTableModel esJava: Eliminar todas las filas de DefaultTableModel

DefaultTableModel Table = (DefaultTableModel) Table.getModel();

Una forma de eliminar es

Table.removeRow (Table.getRowCount() - 1);

pero este método de quitar no existe en mi DefaultTableModel.

Por favor, ayúdenme.

Respuesta

8

Por qué complicar las cosas simples, pero elimina debe ser iterativo,

ejemplo
if (myTableModel.getRowCount() > 0) { 
    for (int i = myTableModel.getRowCount() - 1; i > -1; i--) { 
     myTableModel.removeRow(i); 
    } 
} 

Código

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 
import javax.swing.table.*; 

public class RemoveAddRows extends JFrame { 

    private static final long serialVersionUID = 1L; 
    private Object[] columnNames = {"Type", "Company", "Shares", "Price"}; 
    private Object[][] data = { 
     {"Buy", "IBM", new Integer(1000), new Double(80.50)}, 
     {"Sell", "MicroSoft", new Integer(2000), new Double(6.25)}, 
     {"Sell", "Apple", new Integer(3000), new Double(7.35)}, 
     {"Buy", "Nortel", new Integer(4000), new Double(20.00)} 
    }; 
    private JTable table; 
    private DefaultTableModel model; 

    public RemoveAddRows() { 

     model = new DefaultTableModel(data, columnNames) { 

      private static final long serialVersionUID = 1L; 

      @Override 
      public Class getColumnClass(int column) { 
       return getValueAt(0, column).getClass(); 
      } 
     }; 
     table = new JTable(model) { 

      private static final long serialVersionUID = 1L; 

      @Override 
      public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { 
       Component c = super.prepareRenderer(renderer, row, column); 
       int firstRow = 0; 
       int lastRow = table.getRowCount() - 1; 
       int width = 0; 
       if (row == lastRow) { 
        ((JComponent) c).setBackground(Color.red); 
       } else if (row == firstRow) { 
        ((JComponent) c).setBackground(Color.blue); 
       } else { 
        ((JComponent) c).setBackground(table.getBackground()); 
       } 
       /*if (!isRowSelected(row)) { 
       String type = (String) getModel().getValueAt(row, 0); 
       c.setBackground("Buy".equals(type) ? Color.GREEN : Color.YELLOW); 
       } 
       if (isRowSelected(row) && isColumnSelected(column)) { 
       ((JComponent) c).setBorder(new LineBorder(Color.red)); 
       }*/ 
       return c; 
      } 
     }; 
     table.setPreferredScrollableViewportSize(table.getPreferredSize()); 
     JScrollPane scrollPane = new JScrollPane(table); 
     add(scrollPane); 
     JButton button1 = new JButton("Remove all rows"); 
     button1.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent arg0) { 
       if (model.getRowCount() > 0) { 
        for (int i = model.getRowCount() - 1; i > -1; i--) { 
         model.removeRow(i); 
        } 
       } 
       System.out.println("model.getRowCount() --->" + model.getRowCount()); 
      } 
     }); 
     JButton button2 = new JButton("Add new rows"); 
     button2.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent arg0) { 
       Object[] data0 = {"Buy", "IBM", new Integer(1000), new Double(80.50)}; 
       model.addRow(data0); 
       Object[] data1 = {"Sell", "MicroSoft", new Integer(2000), new Double(6.25)}; 
       model.addRow(data1); 
       Object[] data2 = {"Sell", "Apple", new Integer(3000), new Double(7.35)}; 
       model.addRow(data2); 
       Object[] data3 = {"Buy", "Nortel", new Integer(4000), new Double(20.00)}; 
       model.addRow(data3); 
       System.out.println("model.getRowCount() --->" + model.getRowCount()); 
      } 
     }); 
     JPanel southPanel = new JPanel(); 
     southPanel.add(button1); 
     southPanel.add(button2); 
     add(southPanel, BorderLayout.SOUTH); 
    } 

    public static void main(String[] args) { 
     RemoveAddRows frame = new RemoveAddRows(); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
+0

La razón no es complicar las cosas simples es evitar errores como lo hizo aquí: la instrucción if es redundante, no elimina la fila en el índice 0 e innecesariamente desencadena un evento para cada fila. –

+0

@Walter Laan gracias por el error estúpido notificado, con el resto En desacuerdo, lo mismo con las respuestas aquí, – mKorbel

+0

-1 por insistir en el ciclo de eliminación - fuiste advertido ;-) – kleopatra

36

Puede establecer el número de filas a 0. setRowCount(0)

Presupuesto de documentation:

public void setRowCount(int rowCount) 

establece el número de filas en el modelo. Si el nuevo tamaño es mayor que el tamaño actual, se agregan nuevas filas al final del modelo Si el nuevo tamaño es menor que el tamaño actual, se descartan todas las filas en el índice rowCount y .

Pero como no se puede encontrar ya sea removeRow Sospecho que no haya escrito variable del modelo como DefaultTableModel tal vez, tal vez sólo TableModel?

En ese caso eche sus TableModel-DefaultTableModel así:

DefaultTableModel model = (DefaultTableModel) table.getModel(); 
+0

ya he estado utilizando este mismo encasillamiento pero aún así este método doesn' t existe – Xara

+2

Muéstranos tu código. –

9

¿Por qué no leen la javadoc of DefaultTableModel?

pública RemoveRow vacío (int fila)

Elimina la fila en la fila del modelo. La notificación de la fila que es eliminada se enviará a todos los oyentes.

pública setDataVector vacío (vector dataVector, vector columnIdentifiers)

Sustituye a la variable de instancia dataVector actual por la nueva vector de filas, dataVector.

pública setRowCount vacío (int rowCount)

Establece el número de filas en el modelo. Si el nuevo tamaño es mayor que el tamaño actual, se agregan nuevas filas al final del modelo Si el nuevo tamaño es menor que el tamaño actual, se descartan todas las filas en el índice rowCount y .

+0

¿por qué no lees la pregunta primero? –

11

Has probado esto Esto funciona para mí ..

defaultTableModel.setRowCount(0); 
2

Simplemente sigue quitando la mesa la primera fila del modelo hasta que no queden más filas.

// clean table 
DefaultTableModel myTableModel = (DefaultTableModel) this.myjTable.getModel(); 
while (myTableModel.getRowCount() > 0) { 
     myTableModel.removeRow(0); 
} 
0

Ypú puede escribir un método

public void clearTable() 
    { 
    getTableModel().setRowCount(0); 
    } 

luego llamar a este método desde el lugar que usted necesita para limpiar la mesa

Cuestiones relacionadas