0

テーブル内のすべての行を削除するのに1つの問題があります、jtableを持つ1つのJpanelがあります。行を選択すると、対応する行の値が表示されます。同じパネルで別のボタンをクリックすると、テーブルがリロードされます。 、ここに問題があります、私は例外を得ました

Exception in thread "AWT-EventQueue-0"

    java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
        at java.util.Vector.elementAt(Unknown Source)
        at javax.swing.table.DefaultTableModel.getValueAt(Unknown Source)
        at javax.swing.JTable.getValueAt(Unknown Source)
        at Testsample$16.valueChanged(Testsample.java:1516) 

私はほとんどすべてのメソッドを使用してテーブルの行を削除します今はこのメソッドを使用しています

while (table.getRowCount() > 0) {
                    ((DefaultTableModel) table.getModel()).removeRow(0);
                } 

注:すべてのコントロールが同じである場合、このサンプルアプリケーションに2つのパネルを使用します。すべてが正常に機能しています。2番目のパネルにテーブルを設定すると、例外を超えてスローされ、この問題をどのように解決するかがわかります。

4

4 に答える 4

6

このコードを試してください。

DefaultTableModel dm = (DefaultTableModel)table.getModel();
dm.getDataVector().removeAllElements();
于 2012-06-15T06:23:20.930 に答える
6

表示されている例外は、Swingスレッド(AWT-EventQueue-0)からのものです。他のスレッドでDefaultTableModelを変更すると同時に、JTableが(Swingスレッドで)それ自体を描画しているため、例外が発生しています。

やめてください!テーブルモデルへのすべての変更は、Swingスレッドで行う必要があります。

SwingThreadsの最後の単語を参照してください

使用EventQueue.invokeLater(new Runnable() {...});または類似のもの。

于 2012-06-15T16:28:06.577 に答える
2

これが私の方法です:

DefaultTableModel model=(DefaultTableModel)table.getModel();
            int rc= model.getRowCount();
            for(int i = 0;i<rc;i++){
                model.removeRow(0);
            }   
于 2012-06-15T12:37:03.180 に答える
0

私はこのコードを使用します

dtm_vendor = new DefaultTableModel();
jTable_vendor.setModel(dtm_vendor);
于 2018-06-06T11:46:36.987 に答える