2013-07-11 61 views
0

我一直在廣泛閱讀論壇,並嘗試了多種方法來解決這個問題。更新JTable數據 - 使用AbstractTableModel

問題: 我做了一個自定義AbstractTableModel,所以我可以控制我的數據顯示方式。它只是存儲在一個String[][]。它使用JDBC連接到數據庫以填充初始數據。因此,當我的用戶(通過Swing GUI)搜索某個內容時,我只需構建一個查詢來查詢數據庫,並返回ResultSet。現在,我想在JTable上顯示這個新數據。

研究: 我讀了很多關於聽衆和解僱更新和事情。但我已閱讀並重新閱讀,但仍未完全理解它們。當我爲JTable設置一個新模型時,實際上我想保留我創建的自定義AbstractTableModel並只是更新數據,這是可能的(可能使用AbstractTableModel類中的公共方法創建)?

附加問題:我應該使用此功能的偵聽程序嗎?我需要添加聽衆還是觀察者?

謝謝,我真的很感激它! Rich

回答

1

研究:我讀了很多關於聽衆和解僱更新和事情。 但我已閱讀並重新閱讀,但仍未完全理解 他們。當我爲JTable設置一個新模型時,我實際上想要保留我創建的自定義AbstractTableModel並更新數據,是否可以使用這個 (可以使用我可以創建的AbstractTableModel類 中的公共方法)?

是的,這是可能的。基本上,你需要或者......

  1. 在您的自定義表格模型提供的功能來添加和刪除行或
  2. 使用新的數據
構建自定義表格模型的新實例

附加問題:我是否應該使用這個 功能的偵聽器?我需要添加聽衆還是觀察者?

沒有上下文很難說。我會說,一般不會。在你的情況下,創建一個SwingWorker可能更簡單,執行數據庫查詢並填充新表模型並從doInBackground方法返回它或使用publish/process方法更新現有模型。

+0

非常感謝。您的列表使我在處理表格時的兩個選項變得有意義。我解決了它。 –

0

....所以我可以控制我的數據顯示

方式的模型被用來存儲數據。視圖(JTable)顯示數據。

它只存儲在String [] []中。

沒有必要創建自定義TableModel。只需使用DefaultTableModel即可。

其實我是想保持我的自定義AbstractTableModel上

使用的的DefaultTableModel

setDataVector()方法見Table From Database ExampleGet the Code部分。

+0

我想保留我的AbstractTableModel的原因是因爲我有一排複選框。這個函數不是由DefaultTableModel提供的。那麼你會如何推薦我用這個來處理更新表格的行? –

+0

@RichieEpiscopo,是的,使用DefaultTableModel時,您可以在JTable中顯示一行復選框。我再次強調模型存儲數據,表格呈現數據。您將布爾值存儲在模型中,然後重寫'getColumnClass()'方法以返回適當的類,並且該表將使用適當的渲染器/編輯器。 – camickr

+0

謝謝你的幫助。你也爲我解決了一些問題。我現在開始工作了! –