Swing/ClearTable のバックアップの現在との差分(No.5)
TITLE:JTableの行を全削除
JTableの行を全削除
編集者:Terai Atsuhiro~
作成日:2005-04-11
更新日:2021-02-12 (金) 14:34:00
概要
JTable
のモデルから、カラムヘッダの状態は変更せず、すべての行を一括で削除します。
Screenshot
Advertisement
概要
JTableの行を一括で全削除します。サンプルコード
#screenshot
サンプルコード
解説
-
TableModel
がDefaultTableModel
を継承している場合、model.setRowCount(0)
ですべての行が削除可能 - 空の
TableModel
をJTable
に設定すれば行の全削除を行うことが可能だが、ヘッダモデルの再作成が発生しカラム幅や順番などが初期化されてしまう-
JTable#setAutoCreateColumnsFromModel(false)
とカラムをモデルから自動生成しないようにしておけばTableModel
を入れ替えても列幅などは保存されるbutton.addActionListener(new AbstractAction("全消去") { public void actionPerformed(ActionEvent ae) { //DefaultTableModel model = (DefaultTableModel)table.getModel(); //model.clear(); model.setRowCount(0); } }); #spanadd table.setAutoCreateColumnsFromModel(false); #spanend #spanadd table.setModel(new DefaultTableModel()); #spanend
-
- &jnlp;
- &jar;
- &zip;
解説
モデルがDefaultTableModelを継承しているなら、setRowCount(0)ですべての行を削除することができます。この場合、モデルを作り直している訳ではないので、カラムの幅などは削除する前と同じ値を保っています。 DefaultTableModelを継承していない場合は、モデルに以下の要領*1で行を全削除するメソッドを実装します。- -
-
DefaultTableModel
を継承していない場合は、モデルに以下の要領(詳細はDefaultTableModel.java
のソースを参照)で行を全削除するメソッドを実装する必要があるpublic void clear() { //以下のdataVectorは実装に合わせて変更してください int size = dataVector.size(); dataVector.clear(); fireTableRowsDeleted(0, size-1); //fireTableDataChanged(); } #spanadd public void clear() { #spanend // 以下のdataVectorは実装に合わせて変更する int size = dataVector.size(); dataVector.clear(); fireTableRowsDeleted(0, size - 1); // fireTableDataChanged(); #spanadd } #spanend
参考リンク
参考リンク
- JTableの行を追加、削除
- JTableのセルにJButtonを追加して行削除
- JDK-8032874 ArrayIndexOutOfBoundsException in JTable while clearing data in JTable - Java Bug System
- コメントの
ArrayIndexOutOfBoundsException
と似ている?JDK-8032874
の件は修正済み
- コメントの