web-dev-qa-db-fra.com

Java: Suppression de toutes les lignes de DefaultTableModel

Je souhaite supprimer toutes les lignes de DefaultTable.J'ai trouvé deux méthodes courantes pour les supprimer sur Internet, mais aucune d'entre elles ne fonctionne dans mon cas car ces méthodes n'existent pas dans mon DefaultTableModel. Je me demande pourquoi: le code utilisé pour utiliser DefaultTableModel

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

Une façon de supprimer est

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

mais cette méthode removerow n'existe pas dans mon DefaultTableModel.

Sil te plait aide moi.

18
Xara

Pourquoi compliquer des choses simples, mais supprimer, doit être itératif,

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

Exemple de code

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);
    }
}
11
mKorbel

Vous pouvez définir le nombre de lignes sur 0 .setRowCount(0)

Citation de documentation :

public void setRowCount(int rowCount)

Définit le nombre de lignes dans le modèle. Si la nouvelle taille est supérieure à la taille actuelle, de nouvelles lignes sont ajoutées à la fin du modèle. Si le la nouvelle taille est inférieure à la taille actuelle, toutes les lignes de l'index rowCount et les plus grands sont jetés.

Mais comme vous ne pouvez pas trouver removeRow non plus, je suppose que vous n'avez pas saisi votre variable de modèle sous la forme DefaultTableModel peut-être, peut-être juste TableModel

Dans ce cas, transformez votre TableModel en DefaultTableModel comme ceci:

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

Avez-vous essayé cette Cela fonctionne pour moi ..

defaultTableModel.setRowCount(0);
13

Pourquoi ne lisez-vous pas le javadoc de DefaultTableModel ?

public void removeRow (int row)

Supprime la ligne suivante du modèle. Notification de la rangée en cours retirés seront envoyés à tous les auditeurs. 

public void setDataVector (Vector dataVector, Vector columnIdentifiers)

Remplace la variable d'instance actuelle de dataVector par le nouveau Vecteur de lignes, dataVector.

public void setRowCount (int rowCount)

Définit le nombre de lignes dans le modèle. Si la nouvelle taille est supérieure à la taille actuelle, de nouvelles lignes sont ajoutées à la fin du modèle. Si le la nouvelle taille est inférieure à la taille actuelle, toutes les lignes de l'index rowCount et les plus grands sont jetés.

10
JB Nizet

Continuez simplement à supprimer la première ligne du modèle de table jusqu'à ce qu'il ne reste plus de lignes.

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

Vous pouvez écrire une méthode 

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

puis appelez cette méthode depuis l'endroit où vous devez vider le tableau

0
chamzz.dot