Swing/ClearTable のバックアップ(No.15)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ClearTable へ行く。
- 1 (2006-01-19 (木) 14:33:00)
- 2 (2006-02-27 (月) 15:32:35)
- 3 (2006-04-12 (水) 19:36:51)
- 4 (2006-05-16 (火) 10:33:37)
- 5 (2007-05-30 (水) 21:01:40)
- 6 (2007-10-24 (水) 18:08:44)
- 7 (2008-04-09 (水) 18:16:07)
- 8 (2010-10-28 (木) 14:51:47)
- 9 (2010-12-12 (日) 14:55:29)
- 10 (2013-03-30 (土) 21:13:31)
- 11 (2013-07-23 (火) 08:51:30)
- 12 (2013-07-23 (火) 10:47:23)
- 13 (2013-07-23 (火) 14:44:15)
- 14 (2013-07-24 (水) 14:00:31)
- 15 (2013-07-24 (水) 15:31:50)
- 16 (2013-07-26 (金) 12:08:04)
- 17 (2013-07-26 (金) 18:46:28)
- 18 (2013-07-26 (金) 20:07:44)
- 19 (2013-12-10 (火) 10:33:09)
- 20 (2014-06-05 (木) 02:50:18)
- 21 (2014-10-09 (木) 01:59:05)
- 22 (2014-11-01 (土) 00:46:09)
- 23 (2014-11-18 (火) 01:30:23)
- 24 (2015-12-16 (水) 16:40:45)
- 25 (2016-09-01 (木) 21:33:55)
- 26 (2017-03-28 (火) 19:29:33)
- 27 (2017-10-03 (火) 03:54:50)
- 28 (2017-10-05 (木) 18:25:21)
- 29 (2017-11-02 (木) 15:34:40)
- 30 (2017-12-01 (金) 19:08:03)
- 31 (2018-11-16 (金) 18:29:11)
- 32 (2019-05-22 (水) 17:22:09)
- 33 (2021-02-12 (金) 14:34:00)
- 34 (2022-08-20 (土) 22:15:25)
- 35 (2025-01-03 (金) 08:57:02)
- 36 (2025-01-03 (金) 09:01:23)
- 37 (2025-01-03 (金) 09:02:38)
- 38 (2025-01-03 (金) 09:03:21)
- 39 (2025-01-03 (金) 09:04:02)
- 40 (2025-06-19 (木) 12:41:37)
- 41 (2025-06-19 (木) 12:43:47)
TITLE:JTableの行を全削除
Posted by aterai at 2005-04-11
JTableの行を全削除
`JTable
`の行を一括で全削除します。
- &jnlp;
- &jar;
- &zip;
サンプルコード
button.addActionListener(new AbstractAction("clear") {
@Override public void actionPerformed(ActionEvent e) {
DefaultTableModel model = (DefaultTableModel)table.getModel();
//ArrayIndexOutOfBoundsException: 0 >= 0
//Bug ID: JDK-6967479 JTable sorter fires even if the model is empty
//http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6967479
table.setRowSorter(null);
table.getTableHeader().repaint();
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
`を入れ替えても、上記の方法と同じように既存の列はクリアされません。
//((DefaultTableModel)table.getModel()).setRowCount(0);
table.setAutoCreateColumnsFromModel(false);
table.setModel(new DefaultTableModel());
参考リンク
コメント
- ソートした状態で「remove all rows」を押すと例外が発生しますよ -- tohrisugari?
- ご指摘ありがとうございます。確かに`
ArrayIndexOutOfBoundsException: 0 >= 0
が発生していますね。以前は正常だったはずと思って調べてみたら、Bug ID: JDK-6967479 JTable sorter fires even if the model is emptyが原因のようです。
6u10,6u20
から発生?しているようです。
8
`で修正される予定?みたいなので、しばらくは別の方法を使用するように修正し何時修正されるか分からないので回避方法を考えてみようと思います。-- aterai `Bug ID: JDK-6967479 JTable sorter fires even if the model is emptyにあるようにmodel.setRowCount(0);
の前に、
table.setRowSorter(null);
とソートを不可にする修正などを追加しました。
DefaultTableModel#getColumnClass
`をオーバーライドする方法が簡単なので、そのように修正しました。 -- aterai
- ご指摘ありがとうございます。確かに`