2013-06-29 152 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