2009-04-27 49 views
2

我在將行插入JTable時遇到問題,我不知道問題出在哪裏。將行插入到JTable時重複的值

我做的正是這樣的:

((DefaultTableModel)myJTable.getModel()).insertRow(0,webSiteDownloader.getWebSites().toArray()); 

webSiteDownloader是有ArrayList一個對象。我可以得到這個數組調用方法getWebSites

問題是,當我插入一行,添加第二個,JTable只顯示第一個,但重複兩次。我清楚了嗎?

THKS:d

回答

3

我要一杆進入黑暗和猜測,你要完成這樣的事情:

DefaultTableModel dtm = (DefaultTableModel)myJTable.getModel(); 
for (MyRowObject row : webSiteDownloader.getWebSites()) { 
    dtm.insertRow(0, row.toArray()); 
} 

是否有您所使用的insertRow而不是一個特殊的原因的addRow?

另外,我真的很想推薦你通過擴展AbstractTableModel來展示自己的特殊用途TableModel。未經測試的基本示例:

public class MyTableModel extends AbstractTableModel 
{ 
    protected List<MyObject> rows; 

    public MyTableModel() 
    { 
    rows = new ArrayList<MyObject>(); 
    } 

    public void add(MyObject obj) 
    { 
    rows.add(obj); 
    } 

    @Override 
    public int getRowCount() 
    { 
    return rows.size(); 
    } 

    @Override 
    public int getColumnCount() 
    { 
    // This value will be constant, but generally you'd also 
    // want to override getColumnName to return column names 
    // from an array, and in that case you can return the length 
    // of the array with column names instead 
    return 2; 
    } 

    @Override 
    public Object getValueAt(int row, int column) 
    { 
    MyObject obj = rows.get(row); 

    // Change this to match your columns 
    switch(column) { 
     case 0: return obj.getId(); 
     case 1: return obj.getName(); 
    } 

    return null; 
    } 
} 
+1

Icky代碼。非標準格式。受保護的。缺席決賽。在聲明行中可以完成的構造函數初始化。有些返回,有些在交換機中未處理。返回一個隨機('null')值而不是拋出異常。缺少@Override。 – 2009-04-28 00:29:13