JTableのすべての行を削除する必要があります。
私は次の両方を試しました:
/**
* Removes all the rows in the table
*/
public void clearTable()
{
DefaultTableModel dm = (DefaultTableModel) getModel();
dm.getDataVector().removeAllElements();
revalidate();
}
そして
((DefaultTableModel)table.getModel()).setNumRows(0);
どちらもすべての行を削除しません。何か案は?
次のコードは私のために働いた:
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);
}
Javaのドキュメントを参照して、この目的でDefaultTableModel.setRowCount(int)を使用できます。
public void setRowCount(int rowCount)
モデルの行数を設定します。新しいサイズが現在のサイズよりも大きい場合、モデルの最後に新しい行が追加されます。新しいサイズが現在のサイズよりも小さい場合、インデックスrowCount以上のすべての行は破棄されます。
つまり、次のようなテーブルをクリアできます。
DefaultTableModel dtm = (DefaultTableModel) jtMyTable.getModel();
dtm.setRowCount(0);
さて、「どのようにJavaそれらの行を破棄しますか?」では、最終的にいつかCのようなfree(void *)を呼び出すか、そのメモリゾーンへのすべての参照を削除するだけだと思いますGCが注意する必要があるため、この関数が内部でどのように機能するかについてのドキュメントは明確ではありません。
このような何かが動作するはずです
DefaultTableModel model = (DefaultTableModel)this.getModel();
int rows = model.getRowCount();
for(int i = rows - 1; i >=0; i--)
{
model.removeRow(i);
}
DefaultTableModelのAPIを読む-setRowCountメソッドは、すべての行を一度に削除/破棄することをサポートしています...
((DefaultTableModel)myTable.getModel()).setRowCount(0);
まあ、setNumRows(0)は動作するはずですが、実際にAPIを読んだ場合、このメソッドは廃止され、代わりにどのメソッドを使用するかがわかります。
コードが機能しない場合、あなたは何か他の間違ったことをしているので、投稿されたコードからそれが何であるかを知ることはできません。
問題を示す [〜#〜] sscce [〜#〜] を投稿してください。
JTableからすべての行を削除する最も簡単な方法は、代わりにこのメソッドを使用するだけです...
tablemodel.getDataVector().removeAllElements();
tablemodel.fireTableDataChanged();
tablemodel
は、新しい行を追加するためにテーブル用に作成したモデルです。これは、すべての行を削除する最短かつ最速の方法です。何千もの行がある場合はどうでしょうか。ループ?
try{
DefaultTableModel dtm = (DefaultTableModel) jTable2.getModel();
dtm.setNumRows(0);
}catch(Exception e){
}
DefaultTableModel model = (DefaultTableModel)this.NAMETABLE.getModel();
int rows = model.getRowCount();
for(int i = rows - 1; i >=0; i--)
{
model.removeRow(i);
}
DefaultTableModel tm = (DefaultTableModel) tbl.getModel();
while(tbl.getRowCount() > 0)
{
((DefaultTableModel) tbl.getModel()).removeRow(0);
}
または、行はたくさんあるが列が非常に少ない場合...
DefaultTableModel dtm = new DefaultTableModel();
for(int i=0;i<NUM_COLS;i++) dtm.addColumn(COLUMN_NAME[i]);
myTable.setModel(dtm);
...古いDTMを新しいものに置き換えます。
リセット後にテーブルをクリアする場合は、これを試してください。
DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
model.getDataVector().removeAllElements();
jTable1.removeAll();
複数のテーブルがあったので、「任意の」テーブルをクリアするメソッドを作成しました。
private void deleteAllTableRows(JTable table) {
DefaultTableModel model = (DefaultTableModel) table.getModel();
while( model.getRowCount() > 0 ){
model.removeRow(0);
}
}
MyModel myTableModel = (MyModel) myTable.getModel();
for (int i = myTableModel.getRowCount()-1; i >= 0; i--) myTableModel.deleteRow(i);