我想删除DefaultTable的所有行。我发现了两种在Internet上删除它们的常用方法,但在我的情况下它们都不起作用,因为我的DefaultTableModel中不存在这些方法。我想知道为什么:S。我的代码为使用DefaultTableModel是
DefaultTableModel Table =(DefaultTableModel)Table.getModel();
删除的一种方法是
Table.removeRow(Table.getRowCount() - 1);
但我的DefaultTableModel中不存在此removerow方法。
请帮帮我。
答案 0 :(得分:42)
您可以将行数设置为0。
setRowCount(0)
public void setRowCount(int rowCount)
设置模型中的行数。如果新大小大于 当前大小,新行添加到模型的末尾如果 新大小小于当前大小,索引rowCount和所有行 更多被丢弃。
但是你找不到removeRow
或者我怀疑你没有把你的模型变量键入为DefaultTableModel
,也许只是TableModel
?
在这种情况下,将TableModel
转换为DefaultTableModel
,如下所示:
DefaultTableModel model = (DefaultTableModel) table.getModel();
答案 1 :(得分:13)
你试过这个吗? 这对我有用..
defaultTableModel.setRowCount(0);
答案 2 :(得分:11)
为什么简单的事情复杂化,但删除必须是迭代的,
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);
}
}
答案 3 :(得分:10)
为什么不阅读javadoc of DefaultTableModel?
public void removeRow(int row)
从模型中删除行的行。行的通知正在进行中 删除后将发送给所有听众。
public void setDataVector(Vector dataVector, 矢量columnIdentifiers)
用new取代当前的dataVector实例变量 行矢量,dataVector。
public void setRowCount(int rowCount)
设置模型中的行数。如果新大小大于 当前大小,新行添加到模型的末尾如果 新大小小于当前大小,索引rowCount和所有行 更多被丢弃。
答案 4 :(得分:2)
只需继续删除表格模型的第一行,直到没有剩余的行为止。
// clean table
DefaultTableModel myTableModel = (DefaultTableModel) this.myjTable.getModel();
while (myTableModel.getRowCount() > 0) {
myTableModel.removeRow(0);
}
答案 5 :(得分:0)
Ypu可以写一个方法
public void clearTable()
{
getTableModel().setRowCount(0);
}
然后从您需要清除表格的地方调用此方法