2012-10-23 54 views
1

我想了解一個Swing應用程序,特別是表如何工作。有一個表格從數據庫中檢索數據並在JTable上顯示數據。我瀏覽了代碼並計算出數據如何從數據庫中讀取。如何實現一個當你滾動到底部時刷新的JTable

我似乎正在努力的一件事是數據如何顯示在表格上以及它如何更新。我知道如何在表格上顯示數據,但與此表格的不同之處在於數據是動態更新的。即不是從數據庫中檢索的所有數據都顯示在表上。

它看起來應用程序顯示的行數很多,當用戶滾動鼠標或將滾動條移動到表格底部時,應用程序自動更新表格並顯示更多數據(我可以看到那裏當發生這種情況時會有輕微的延遲)。

對於我來說,能夠弄清楚上述是如何實現的,我需要一些關於這種技術的更多信息,即這種技術叫什麼,以及常用的接口/類是什麼。

如何實現上述目標的示例的鏈接將非常有用,因爲我需要首先查看簡化版本。

有什麼想法?

感謝

回答

3

我不知道這是什麼技術的名稱叫,但我知道它在移動世界的這些天(例如,Twitter和Facebook的應用程序使用它)很常見。出於實際的目的,該實現可能是一個普通的JTable,它具有一些修改的組件。

  1. 寫自己TableModel要顯示的數據(這是很容易做到),你可以從任何地方的信息,並添加/刪除數據,你認爲合適。請參閱文檔here。只有少數幾種方法需要實施

    這裏最重要的主要方法是getRowCount()方法,您可以在添加/刪除表格中的數據時更改方法,以及將數據檢索到的getValueAt()方法顯示在表格中。

    TableModel可能會在其中包含一個類似數組的對象(如ArrayList),其中包含應顯示在表中的數據。當你想添加/刪除表中的數據(即'刷新')時,你只需在這個數組列表中添加/刪除行,然後在表上觸發一次刷新來獲取更改。

    或者,如果使用數據庫,則可以在TableModel中打開一個數據庫Cursor,該數據庫在您希望在表上顯示值時調用getValueAt()

  2. 您將需要覆蓋的GUI組件之一,如JScrollBar,或添加Listener的滾動條,以便它檢測當您嘗試滾過表的末尾,並觸發刷新。

  3. 從視覺上看,如果要在滾動表格末尾(如顯示單詞「刷新」)時顯示特別的內容,則需要覆蓋當前外觀的某些繪畫組件。如果您想在它的「高度」上添加幾個滴答聲,您還需要覆蓋JScrollBar,以便實際上可以將滾動條移動到「刷新」部分(僅僅是一種顯示方式 - 上面的聽衆應該做的實際刷新工作)

+0

奇怪這個html格式化程序,btw +1 – mKorbel

2

這種技術被稱爲延遲加載。有一些不同的方法可以讓一個JTable懶惰。

實現惰性表並不像看起來那麼容易,因爲您將面臨表的不同加載狀態。我最喜歡的方式來實現延遲加載表(與WATTO工作室描述的稍有不同)是使用/創建一個延遲加載列表作爲tablemodel並使用代理對象來觸發加載新數據。因此,在初始化表時,不要加載整個數據,只需使用代理對象填充表(空數據對象,而只注入原始ID)。每當代理對象被詢問任何值時(例如來自渲染器,只有當該行可見時纔會發生),您可以從服務中獲取原始數據對象 - 也可能會載入接下來的50個對象,以避免向服務器詢問每一行 - 並用新數據替換代理對象。

初看起來,這看起來有點簡單,但根據您的數據可能會變得非常混亂。例如,當你的數據在自己身上使用自引用的外鍵和類似的東西時。而且,不需要在需要時加載數據來獲得額外的性能,因爲它只是在需要時加載數據,所以該表經常感覺有點慢。因此,平衡性能和平滑滾動行爲是挑戰,同時篩選和排序數據。

使用關鍵字延遲加載,你應該找到一些關於這個主題的例子。

2
+0

你似乎總是走一切的例子,不是嗎? :-)這對第一視圖來說看起來還挺有趣,特別是要學習jtable如何工作。 – crusam

相關問題