2008-12-16 51 views
1

我有一個JTable自定義TableModelDataTableModel。我初始化了一組列名的表,沒有數據如下:JTable更新沒有出現

books = new JTable(new DataTableModel(new Vector<Vector<String>>(), title2)); 
JScrollPane scroll1 = new JScrollPane(books); 
scroll1.setEnabled(true); 
scroll1.setVisible(true); 
JSplitPane jsp1 = new JSplitPane(JSplitPane.VERTICAL_SPLIT, scroll1, scroll2); 
JSplitPane jsp2 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, inventory, jsp1); 
myPanel.add(jsp2, BorderLayout.CENTER); 

我以後想用一組數據來更新書籍,使用以下命令:

DataTableModel d = (DataTableModel)books.getModel(); 
d.setValues(bookList); 
books.setModel(d); 

其中書目是一個確實有數據的Vector<Vector<String>>。但是,儘管所有代碼都正在執行,但它並未顯示在屏幕上。爲setValues()方法的代碼是:

public void setValues(Vector<Vector<String>> v) { 
    values = v; 
    fireTableDataChanged(); 
} 

我失去了一些東西在這裏?

類和我DataTableModel方法(這些方法都實現返回正確的結果):

public class DataTableModel extends AbstractTableModel { 
    public DataTableModel(Vector<Vector<String>> v, Vector<String> c) {} 

    public int getColumnCount() { 
     if (values != null && values.size() > 0) 
      return values.elementAt(0).size(); 
     else 
      return 0; 
    } 

    public int getRowCount() { 
     if (values != null && values.size() > 0) 
      return values.size(); 
     else 
      return 0; 
    } 

    public Object getValueAt(int arg0, int arg1) {} 
    public void setValues(Vector<Vector<String>> v) {} 
    public Vector<Vector<String>> getValues() {} 
    public void setColumnNames(Vector<String> columns) {} 
    public String getColumnName(int col) {} 
} 
+0

mhhh沒了..我想你的模型和你的表沒有連接。你可以發佈你的實際代碼..? – OscarRyz 2008-12-16 04:32:15

+0

設置模型應該足夠了。 。你編碼DataTableModel你自己? – OscarRyz 2008-12-16 04:34:39

+0

是的,我做到了。當我檢查DataTableModel時,它似乎有正確的數據。 – Elie 2008-12-16 13:05:54

回答

1

您是否實施了其他方法TableModel?如果是這樣,你的實現看起來如何?也許你應該發佈你的表模型代碼讓我們檢查它?

BTW:執行TableModel時出現的主要錯誤是將getRowCount()getColumnCount()重寫爲return 0。這將告訴表沒有數據可以顯示...

編輯:所以你似乎使用的東西就像AbstractTableModelDefaultTableModel,對吧?你是否重寫了一些方法?

編輯2:您應該致電fireTableStructureChanged而不是fireTabeDataChanged(),因爲最初您的表模型正在返回0getColumnCount()

編輯3:爲了進一步優化您的模型,您應該考慮返回一個固定值爲getColumnCount(),如果您有每次具有相同列數的數據。然後你可以調用fireTabeDataChanged(),它只是加載新的數據,而不是每次完全建立表格和數據(fireTableStructureChanged())。

0

這是個奇怪的問題。你說DataTableModel執行TableModel。所以。如果你不使用抽象類,那麼問題應該是你如何處理事件。聽衆是否真的註冊並通知?如果可以,請發送鏈接至DataTableModel的來源。但在此之前,請驗證您是否正確處理了註冊到此模型中的偵聽器。

0

這解決了這個問題;你不能解除綁定主bindingGroup但你指定jtablebinding更新它這樣

Binding b = bindingGroup.getBindings().get(0); 
b.unbind(); 
b.bind();