Подтвердить что ты не робот

Java: удаление всех строк DefaultTableModel

Я хочу удалить все строки DefaultTable.I нашел два обычных способа удалить их в Интернете, но ни один из них не работает в моем случае, потому что эти методы не существуют в моем DefaultTableModel. Я удивляюсь, почему: S.My-код для использование DefaultTableModel

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

Один способ удаления -

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

но этот метод removerow не существует в моей DefaultTableModel.

Пожалуйста, помогите мне.

4b9b3361

Ответ 1

Почему усложнение простых вещей, но удаление должно быть итеративным,

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

Пример кода

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

Ответ 2

Вы можете установить количество строк в 0. setRowCount(0)

Цитата из документации:

public void setRowCount(int rowCount)

Устанавливает количество строк в модели. Если новый размер больше, чем   текущий размер, новые строки добавляются в конец модели. Если   новый размер меньше текущего размера, все строки в index rowCount и   больше отбрасываются.

Но поскольку вы не можете найти removeRow, либо я подозреваю, что вы не набрали модельную переменную как DefaultTableModel, возможно, просто TableModel?

В этом случае введите TableModel в DefaultTableModel следующим образом:

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

Ответ 3

Вы пробовали это Это работает для меня..

defaultTableModel.setRowCount(0);

Ответ 4

Почему вы не читаете javadoc DefaultTableModel?

public void removeRow (int row)

Удаляет строку из строки из модели. Уведомление о том, что строка удаленный будет отправлен всем слушателям.

public void setDataVector (векторные данныеВектор,                           Идентификаторы векторных столбцов)

Заменяет текущую переменную экземпляра dataVector новым Вектор строк, dataVector.

public void setRowCount (int rowCount)

Устанавливает количество строк в модели. Если новый размер больше, чем текущий размер, новые строки добавляются в конец модели. Если новый размер меньше текущего размера, все строки в index rowCount и больше отбрасываются.

Ответ 5

Просто удаляйте первую строку таблицы, пока не осталось больше строк.

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

Ответ 6

Ypu может написать метод

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

затем вызовите этот метод из того места, которое нужно очистить от таблицы