2010-10-07 49 views
16

我有一个JTable和它有这样定义的表模型:如何清除jTable的内容?

javax.swing.table.TableModel dataModel = 
    new javax.swing.table.DefaultTableModel(data, columns); 
tblCompounds.setModel(dataModel); 

有谁知道我怎么可以清除它的内容是什么?就这样它返回到一个空表?

回答

30

最简单的方法:

//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行数据的模型会激活相应的数据变化事件,这将重建自己的表。

+1

+1(稍有变化),TableModel接口没有setRowCount()方法。该方法在DefaultTableModel类中找到。我编辑了你的示例代码来使用DefaultTableModel,而不是TableModel。 – camickr 2010-10-07 16:10:17

+0

+1 ...对,我忘了DefaultTableModel.SetRowCount(0) – eee 2010-10-08 01:11:58

+0

-100如果我理解了这个问题,这不是正确的答案。 在这个问题中,我们意味着最多的时间,我们希望将表格中的单元格清空,并且没有单元格的表格。 按照下面@Gebreigziabher Abadi的回答作为最正确的,但改变'dm.setValueAt(“”,i,j);' 与 'dm.setValueAt(null,i,j);' – Universe 2014-11-05 14:53:02

9

如果你的意思是删除的内容,但它的细胞保持完整,那么:

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

对不起,我想表中返回到其刚列标题,但没有数据,它的状态 – tom 2010-10-07 08:00:36

+0

(虚拟)-1,第二部分:只要你知道,模型的类型是DefaultTableModel,调用的正确方法是setRowCount(0)。 – kleopatra 2012-09-11 12:32:16

2

你有几个选项:

  1. 创建一个new DefaultTableModel(),但记住要重新附加任何侦听器。
  2. 迭代model.removeRow(index)删除。
  3. 定义您自己的包装List/Set的模型并展示clear方法。
+1

DefaultTableModel _has_明确的方法 - 只是命名不同:-) – kleopatra 2012-09-11 12:33:33

-1

另一个简单的答案:

defaultTableModel.getDataVector().removeAllElements(); 
+0

不,这完全是错误的:从来没有改变模型脚下的数据,而是使用模型api – kleopatra 2012-09-11 12:30:05

4
//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); 
     } 
    } 
+1

判断的事实是,OP接受了一个答案,即_removed所有rows_清空_cell content_似乎并不是他/她想要的实现:-)如果这是目标,那么将内容设置为空字符串不会清空它并且可能会炸毁你的脸(如果模型期望另一种类型的话):更好地为null。 – kleopatra 2013-12-25 13:16:40

0

我认为你的意思,你想清楚了JTable中的所有细胞,并使其就像一个新的空白JTable中。 例如,如果您的表格包含40个原料,您可以执行以下操作。

DefaultTableModel model = (DefaultTableModel)this.jTable.getModel(); 
model.setRowCount(0); 
model.setRowCount(40); 
-1
public void deleteAllRows() { 
    DefaultTableModel model = (DefaultTableModel) jTable1.getModel(); 
    model.setRowCount(0); 
} 
+2

请添加一些评论 – 2017-05-10 18:34:49