web-dev-qa-db-ja.com

JTableのすべての行を削除する

JTableのすべての行を削除する必要があります。

私は次の両方を試しました:

/**
 * Removes all the rows in the table
 */
public void clearTable()
{
    DefaultTableModel dm = (DefaultTableModel) getModel();
    dm.getDataVector().removeAllElements();
    revalidate();
}

そして

((DefaultTableModel)table.getModel()).setNumRows(0);

どちらもすべての行を削除しません。何か案は?

27
user489041

次のコードは私のために働いた:

DefaultTableModel dm = (DefaultTableModel) getModel();
int rowCount = dm.getRowCount();
//Remove rows one by one from the end of the table
for (int i = rowCount - 1; i >= 0; i--) {
    dm.removeRow(i);
}
36
Mihai

Javaのドキュメントを参照して、この目的でDefaultTableModel.setRowCount(int)を使用できます。

public void setRowCount(int rowCount)

モデルの行数を設定します。新しいサイズが現在のサイズよりも大きい場合、モデルの最後に新しい行が追加されます。新しいサイズが現在のサイズよりも小さい場合、インデックスrowCount以上のすべての行は破棄されます

つまり、次のようなテーブルをクリアできます。

DefaultTableModel dtm = (DefaultTableModel) jtMyTable.getModel();
dtm.setRowCount(0);

さて、「どのようにJavaそれらの行を破棄しますか?」では、最終的にいつかCのようなfree(void *)を呼び出すか、そのメモリゾーンへのすべての参照を削除するだけだと思いますGCが注意する必要があるため、この関数が内部でどのように機能するかについてのドキュメントは明確ではありません。

59
Felype

このような何かが動作するはずです

DefaultTableModel model = (DefaultTableModel)this.getModel(); 
int rows = model.getRowCount(); 
for(int i = rows - 1; i >=0; i--)
{
   model.removeRow(i); 
}
21
james_bond

DefaultTableModelのAPIを読む-setRowCountメソッドは、すべての行を一度に削除/破棄することをサポートしています...

((DefaultTableModel)myTable.getModel()).setRowCount(0);

10
Chris

まあ、setNumRows(0)は動作するはずですが、実際にAPIを読んだ場合、このメソッドは廃止され、代わりにどのメソッドを使用するかがわかります。

コードが機能しない場合、あなたは何か他の間違ったことをしているので、投稿されたコードからそれが何であるかを知ることはできません。

問題を示す [〜#〜] sscce [〜#〜] を投稿してください。

8
camickr

JTableからすべての行を削除する最も簡単な方法は、代わりにこのメソッドを使用するだけです...

tablemodel.getDataVector().removeAllElements();
tablemodel.fireTableDataChanged();

tablemodelは、新しい行を追加するためにテーブル用に作成したモデルです。これは、すべての行を削除する最短かつ最速の方法です。何千もの行がある場合はどうでしょうか。ループ?

try{

    DefaultTableModel dtm = (DefaultTableModel) jTable2.getModel();

    dtm.setNumRows(0); 

}catch(Exception e){
}
5
codex98
    DefaultTableModel model = (DefaultTableModel)this.NAMETABLE.getModel(); 
    int rows = model.getRowCount(); 
    for(int i = rows - 1; i >=0; i--)
    {
       model.removeRow(i); 
    }
1
jersonjcnt
DefaultTableModel tm = (DefaultTableModel) tbl.getModel();
while(tbl.getRowCount() > 0)
{
    ((DefaultTableModel) tbl.getModel()).removeRow(0);
}
1
SwR

または、行はたくさんあるが列が非常に少ない場合...

DefaultTableModel dtm = new DefaultTableModel();
for(int i=0;i<NUM_COLS;i++) dtm.addColumn(COLUMN_NAME[i]);
myTable.setModel(dtm);

...古いDTMを新しいものに置き換えます。

1
Andrew

リセット後にテーブルをクリアする場合は、これを試してください。

DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
model.getDataVector().removeAllElements();
jTable1.removeAll();
0
Hiraga Taichiro

複数のテーブルがあったので、「任意の」テーブルをクリアするメソッドを作成しました。

private void deleteAllTableRows(JTable table) {
    DefaultTableModel model = (DefaultTableModel) table.getModel();
    while( model.getRowCount() > 0 ){
        model.removeRow(0);
    }
}
0
nicc777
MyModel myTableModel = (MyModel) myTable.getModel();
for (int i = myTableModel.getRowCount()-1; i >= 0; i--) myTableModel.deleteRow(i);
0