我有一个JTable和它有这样定义的表模型:如何清除jTable的内容?
javax.swing.table.TableModel dataModel =
new javax.swing.table.DefaultTableModel(data, columns);
tblCompounds.setModel(dataModel);
有谁知道我怎么可以清除它的内容是什么?就这样它返回到一个空表?
我有一个JTable和它有这样定义的表模型:如何清除jTable的内容?
javax.swing.table.TableModel dataModel =
new javax.swing.table.DefaultTableModel(data, columns);
tblCompounds.setModel(dataModel);
有谁知道我怎么可以清除它的内容是什么?就这样它返回到一个空表?
最简单的方法:
//private TableModel dataModel;
private DefaultTableModel dataModel;
void setModel() {
Vector data = makeData();
Vector columns = makeColumns();
dataModel = new DefaultTableModel(data, columns);
table.setModel(dataModel);
}
void reset() {
dataModel.setRowCount(0);
}
即你的复位方法告诉模型有0行数据的模型会激活相应的数据变化事件,这将重建自己的表。
如果你的意思是删除的内容,但它的细胞保持完整,那么:
public static void clearTable(final JTable table) {
for (int i = 0; i < table.getRowCount(); i++)
for(int j = 0; j < table.getColumnCount(); j++) {
table.setValueAt("", i, j);
}
}
}
OK,如果你的意思是删除所有的细胞,但维持其头:
public static void deleteAllRows(final DefaultTableModel model) {
for(int i = model.getRowCount() - 1; i >= 0; i--) {
model.removeRow(i);
}
}
你有几个选项:
new DefaultTableModel()
,但记住要重新附加任何侦听器。model.removeRow(index)
删除。clear
方法。DefaultTableModel _has_明确的方法 - 只是命名不同:-) – kleopatra 2012-09-11 12:33:33
另一个简单的答案:
defaultTableModel.getDataVector().removeAllElements();
不,这完全是错误的:从来没有改变模型脚下的数据,而是使用模型api – kleopatra 2012-09-11 12:30:05
//To clear the Contents of Java JTable
DefaultTableModel dm = (DefaultTableModel) JTable1.getModel();
for (int i = 0; i < dm.getRowCount(); i++) {
for (int j = 0; j < dm.getColumnCount(); j++) {
dm.setValueAt("", i, j);
}
}
判断的事实是,OP接受了一个答案,即_removed所有rows_清空_cell content_似乎并不是他/她想要的实现:-)如果这是目标,那么将内容设置为空字符串不会清空它并且可能会炸毁你的脸(如果模型期望另一种类型的话):更好地为null。 – kleopatra 2013-12-25 13:16:40
我认为你的意思,你想清楚了JTable中的所有细胞,并使其就像一个新的空白JTable中。 例如,如果您的表格包含40个原料,您可以执行以下操作。
DefaultTableModel model = (DefaultTableModel)this.jTable.getModel();
model.setRowCount(0);
model.setRowCount(40);
public void deleteAllRows() {
DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
model.setRowCount(0);
}
请添加一些评论 – 2017-05-10 18:34:49
+1(稍有变化),TableModel接口没有setRowCount()方法。该方法在DefaultTableModel类中找到。我编辑了你的示例代码来使用DefaultTableModel,而不是TableModel。 – camickr 2010-10-07 16:10:17
+1 ...对,我忘了DefaultTableModel.SetRowCount(0) – eee 2010-10-08 01:11:58
-100如果我理解了这个问题,这不是正确的答案。 在这个问题中,我们意味着最多的时间,我们希望将表格中的单元格清空,并且没有单元格的表格。 按照下面@Gebreigziabher Abadi的回答作为最正确的,但改变'dm.setValueAt(“”,i,j);' 与 'dm.setValueAt(null,i,j);' – Universe 2014-11-05 14:53:02