2013-06-29 115 views
0

我需要删除行,形成JTable。我写了这样的代码:JTable不会删除行

DefaultTableModel dtm = (DefaultTableModel) jTable1.getModel(); 
int x = 0; 
int row = dtm.getRowCount(); 

while(row>=x){ 

    dtm.removeRow(x); 
    x++; 

} 

但它会产生一个错误,如:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 
    24 >= 24 
+0

你有一个错误的错误,因为你应该使用'>'而不是'> ='。 – Vulcan

回答

6

一个简单的办法是使用:

dtm.setRowCount(0); 

这也是更有效,因为该表只需要一次重新绘制自己,所有的行已被删除后。

+0

我相信你需要使用revalidate()或repaint()虽然 – Marco

+2

@Marco否需要这个。该模型触发了由JTable# – Robin

+0

提取的必要事件。Swing的工作方式是更新模型,并且模型通知视图重新绘制自己。 – camickr

0

你可以试试这个:

while(row>x){ 
    dtm.removeRow(x); 
    x++; 
} 

UPDATE

DefaultTableModel model = new DefaultTableModel(); 
    JTable table = new JTable(model); 

    model.addColumn("Col1"); 
    model.addColumn("Col2"); 
    model.addRow(new Object[]{"1", "2"}); 
    model.addRow(new Object[]{"1", "2"}); 

    table.setModel(model); 

    for(int index = 0; index<table.getRowCount();) 
    { 
     model.removeRow(index); 
    } 

W ith安装Java更容易。对不起,错误的答案。

+0

+1,这个问题的答案,但仍然不是最好的解决方案。 – camickr

+0

-1同样的问题:在删除了总行数的一半后,访问下一个x会抛出,因为现在它更大_current_ rowCount – kleopatra