Java:删除DefaultTableModel的所有行

我想删除DefaultTable的所有行。我发现两种常见的方法来删除它们在互联网上,但没有一个在我的情况下工作,因为这些方法不存在于我的DefaultTableModel。我想知道为什么:S。我使用DefaultTableModel的代码是

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

一种方法是删除

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

但是这个removerow方法在我的DefaultTableModel中不存在。

请帮我一下

为什么复杂简单的事情,但删除必须迭代,

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

您可以将行计数设置为0. setRowCount(0)

从文档引用:

 public void setRowCount(int rowCount) 

设置模型中的行数。 如果新大小大于当前大小,则将新行添加到模型的末尾。如果新大小小于当前大小,则会丢弃索引rowCount和更大的所有行。

但是,因为你找不到removeRow或者我怀疑你没有键入你的模型variables作为DefaultTableModel或许,也许只是TableModel

在这种情况下,像这样将TableModelDefaultTableModel

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

你有没有试过这个对我有用..

 defaultTableModel.setRowCount(0); 

为什么不读取DefaultTableModel的javadoc ?

public void removeRow(int row)

从模型中删除行中的行。 被删除的行的通知将被发送给所有的监听者。

public void setDataVector(Vector dataVector,Vector columnIdentifiers)

用新的Vector向量dataVectorreplace当前的dataVector实例variables。

public void setRowCount(int rowCount)

设置模型中的行数。 如果新大小大于当前大小,则将新行添加到模型的末尾。如果新大小小于当前大小,则会丢弃索引rowCount和更大的所有行。

只要继续删除表模型的第一行,直到没有更多的行。

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