• title: JTableの行を全削除 tags: [JTable, DefaultTableModel] author: aterai pubdate: 2005-04-11 description: JTableのモデルから、カラムヘッダの状態は変更せず、すべての行を一括で削除します。

概要

JTableのモデルから、カラムヘッダの状態は変更せず、すべての行を一括で削除します。

サンプルコード

button.addActionListener(new AbstractAction("clear") {
  @Override public void actionPerformed(ActionEvent e) {
    DefaultTableModel model = (DefaultTableModel) table.getModel();
    model.setRowCount(0);
  }
});
View in GitHub: Java, Kotlin

解説

モデルがDefaultTableModelを継承しているなら、setRowCount(0)ですべての行を削除することができます。この場合、モデルを作り直している訳ではないので、カラムの幅などは削除する前と同じ値を保っています。

DefaultTableModelを継承していない場合は、モデルに以下の要領(詳細はDefaultTableModel.javaのソースを参照)で行を全削除するメソッドを実装します。

public void clear() {
  //以下のdataVectorは実装に合わせて変更する
  int size = dataVector.size();
  dataVector.clear();
  fireTableRowsDeleted(0, size - 1);
  //fireTableDataChanged();
}

JTable#setAutoCreateColumnsFromModel(false)とカラムをモデルから自動生成しないようにしておけば、TableModelを入れ替えても、上記の方法と同様に既存の列幅などはそのまま残ります。

table.setAutoCreateColumnsFromModel(false);
table.setModel(new DefaultTableModel());

参考リンク

コメント