如何删除jtable中的所有行?

时间:2012-06-15 06:20:37

标签: java swing jtable awt jpanel

我有一个问题是删除我表中的所有行,我有一个Jpanel有jtable,当我选择行时它会显示相应的行值,当我点击同一面板上的另一个按钮时它,将重新加载表,这是问题,我得到了异常

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);
                } 

注意:我在这个示例应用程序中使用两个面板,当所有控件都处于相同状态时,一切正常,如果我在第二个面板中设置表意味着,它会抛出异常,任何想法如何解决这个问题

4 个答案:

答案 0 :(得分:6)

试试这段代码..

DefaultTableModel dm = (DefaultTableModel)table.getModel();
dm.getDataVector().removeAllElements();

答案 1 :(得分:6)

您看到的异常来自Swing Thread(AWT-EventQueue-0)。发生异常是因为JTable正在绘制自己(在Swing Thread上),同时你正在修改其他线程上的DefaultTableModel。

不要那样做!对表模型的所有更改都必须在Swing Thread上进行。

请参阅Last word in Swing Threads

使用EventQueue.invokeLater(new Runnable() {...});或类似内容。

答案 2 :(得分:2)

这是我的方法:

DefaultTableModel model=(DefaultTableModel)table.getModel();
            int rc= model.getRowCount();
            for(int i = 0;i<rc;i++){
                model.removeRow(0);
            }   

答案 3 :(得分:0)

我使用此代码

dtm_vendor = new DefaultTableModel();
jTable_vendor.setModel(dtm_vendor);