2012-11-01 41 views
1

,如果有人知道一個基於Swing的替代的JTable處理其自身的滾動而不是被放置在JScrollPane的我不知道。JTabel的替代方案,處理自己的滾動

讓我解釋一下爲什麼。我目前正在開發一個項目,我需要以表格格式顯示來自數據庫的1.6 GB數據。我花了上一週半研究JTable及其所有相關類。我學到的東西導致我相信JTable不足以滿足後續的原因。

JTable中與數據集過大,在屏幕上顯示需要投入JScrollPane中充當過太大,以適應屏幕組件的移動窗口。這滿足了能夠具有不使用分頁的荒謬大型JTable的要求。但是,仍然會創建整個JTable,導致TableModel被要求輸入所有數據。我可能在這一點上是錯誤的,但是我的實踐經驗和缺乏關於這些東西的基礎的文檔表明我不是。

我需要一個JTable,它可以連續滾動瀏覽數據庫的大量數據集,並在TableModel一側緩存(只有大約100-300條記錄)(注意!這是重要部分)只要求表中可見區域的數據。我的經驗表明,JScrollPane中的標準JTable將要求提供所有數據,而不管什麼是可見的,防止任何類型的後端分頁工作。告訴我,我錯了,並向我展示一個工作反例,或者將我指向第三方組件,這些組件的行爲是我需要的。

+1

它不是真正的table * model *,它定義了表的內存效率如何?即定義一個定製的[TableModel](http://docs.oracle.com/javase/7/docs/api/javax/swing/table/TableModel.html),它可以有效地處理數據並讓滾動窗格處理視覺材料。 –

+0

另請參閱http://stackoverflow.com/q/1380677/1076463 – Robin

+0

@DuncanJones我沒有要求處理自己的數據的JTable。我要求一個處理自己滾動的JTable,因爲我的印象是JTable不關心通過JScrollPane看到它本身的哪部分內容,只是調用getValueAt()直到它填充它的所有行。我可能錯了,但我迄今的經驗表明,情況就是如此。 – Stuporman

回答

4

有這個沒有通用的解決方案,爲實現取決於你打算如何將數據模型分區爲可管理的部分。如建議here,您可以使用subList()方法對任意List<Record>進行分區。您可以按照here所示公開包含每個分區的單個模型。另請參閱使用SQL的替代approach

我需要連續滾動,而不是分頁。

你實現TableModel可以使用SwingWorker,不斷更新的觀點,如本exampleAPI

+0

這似乎是你正在推薦傳統的分頁。也許我沒有在我的問題中說清楚,但我需要連續滾動而不是分頁。 – Stuporman

+0

是的,我正在閱讀評論並忽略了您的更新。我已經詳細闡述過了。另請參閱此[示例](http://stackoverflow.com/a/7519403/230513),該地址面對不斷更新的滾動。 – trashgod

+0

我認爲當我完成其中一種解決方案時,我將啓動一個開源Swing項目,以消除此過程中涉及的大部分樣板,因爲這是浪費大量時間。 – Stuporman