2009-10-28 30 views
2

在那裏有幾個「高級」表格/電子表格SWT小部件(Nattable,Nebula Grid),但它們都不支持真正大的數據集。 Nattable是最接近的一個,但它所使用的數據類型仍然存在限制,導致表中的行數變得很有限。高級SWT表部件

我需要能夠代表至少 2^32行,最好是2^64。

+1

什麼用戶在他們的正確思想想要看到2^32?我建議你修改你的要求。 – andyczerwonka 2009-10-28 22:53:53

+2

沒有人在談論**看到** 2^32行。這一切都是**解決**的問題。我擁有的型號是32位內存空間。如果我不能將行數設置爲2^32,我將不得不實現我自己的分頁方案,這是我希望避免的。 – JesperE 2009-10-29 08:04:19

回答

3

SWT.VIRTUAL有問題嗎?然後你可以使用一個LazyContentProvider,,它給你一個回調加載視圖中需要的東西。

事情是這樣的......

TableViewertableViewer = new TableViewer(parent, SWT.VIRTUAL|SWT.BORDER|SWT.V_SCROLL); 
// skipping the noise 
tableViewer.setItemCount(100000); 
tableViewer.setContentProvider(new LazyContentProvider()); 
tableViewer.setLabelProvider(new TableLabelProvider()); 
tableViewer.setUseHashlookup(true); 
tableViewer.setInput(null); 
+1

嘗試setItemCount(Integer.MAX_VALUE)。 SWT表格窗口小部件有一個所有項目的後備數組。關於它的唯一「虛擬」是實際的**值**在需要之前不會被獲取。如果檢索代價昂貴,這種方法效果很好,但不會超過幾百萬行。 – JesperE 2009-10-29 08:00:07

+0

如果您確切需要2^32行,請使用帶有SWT.VIRTUAL樣式的表格和Integer.MAX_VALUE項目,並且當您必須顯示例如項目500(2^31之外)時,您將打印項目編號。 1000(2^32)。 – 2009-11-03 18:44:13

+1

不幸的是,setItemCount(Integer.MAX_VALUE)會導致出現OutOfMemory錯誤,因爲Table控件試圖創建該大小的數組。 – JesperE 2009-11-04 12:36:26

6

SWT Matrix斷能力bariers讓行或列的任何BigInteger的量。它是封閉的源代碼,但免費用於私人和非商業用途。雖然在這一點上早期的alpha釋放。

+0

SWT Matrix實際上看起來很有前景。謝謝,我會試試看。 – JesperE 2011-05-15 06:53:50

+0

我很高興在嘗試後知道您的印象。文檔中缺失或未覆蓋的任何重要功能? – 2011-05-20 06:56:44

+0

會做。我只需要找一些空閒時間來完成它。:) – JesperE 2011-05-20 16:12:26