setvalueat libreria filas fila eliminar diseƱo dinamicamente datos columnas cargar agregar addrow java swing jtable defaulttablemodel

libreria - Java: Eliminando todas las filas de DefaultTableModel



libreria jtable java (6)

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. Me pregunto por qué: S. Mi código para usar DefaultTableModel es

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

Una forma de eliminar es

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

pero este método removerow no existe en mi DefaultTableModel.

Por favor, ayúdame.


¿Has probado esto? Esto funciona para mí ..

defaultTableModel.setRowCount(0);


¿Por qué complicar las cosas simples, pero las eliminaciones deben ser iterativas,

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

Ejemplo de 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); } }


¿Por qué no lees el javadoc de DefaultTableModel ?

public void removeRow (int row)

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

public void setDataVector (Vector dataVector, Vector columnIdentifiers)

Reemplaza la variable de instancia actual de dataVector con el nuevo Vector de filas, dataVector.

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, las nuevas filas se agregan al final del modelo. Si el nuevo tamaño es menor que el tamaño actual, todas las filas en el índice rowCount y mayores se descartan.


Puede establecer el recuento de filas en 0. setRowCount(0)

Cita de la 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, las nuevas filas se agregan al final del modelo. Si el nuevo tamaño es menor que el tamaño actual, todas las filas en el índice rowCount y mayores se descartan.

Pero como tampoco puede encontrar removeRow , sospecho que no ha escrito la variable de modelo como DefaultTableModel , quizás, ¿tal vez solo TableModel ?

En ese caso, TableModel su TableModel a DefaultTableModel esta manera:

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


Simplemente sigue eliminando la primera fila del modelo de tabla hasta que no queden más filas.

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


Ypu puede escribir un método

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

A continuación, llame a este método desde el lugar donde necesita limpiar la tabla.