如何在SWT表格中顯示大量行?巨大的是20K行20列以上的東西。不要問我爲什麼需要展示那麼多的數據,這不是重點。關鍵是如何使其儘可能快地工作,以便最終用戶不會感到無聊等待。每行顯示一些對象的實例,列是它的屬性(一些)。我以爲使用JFace內容/標籤提供程序模式,但擔心它會比直接使用數據打印表格慢。這是怎麼回事:在SWT/JFace RCP應用程序中填充巨大的表格
Display.getDefault().asyncExec(new Runnable() {
public void run() {
List<MyObject> objects = model.getViewData();
for(MyObject object: objects){
TableItem item = new TableItem(table, SWT.NULL);
item.setImage(0, img1);
item.setBackground(color1);
item.setText(0, object.getProperty0());
item.setText(1, object.getProperty1());
item.setText(2, object.getProperty2());
.....
}
});
在我的電腦上繪製20K記錄大約需要20秒。 我在Windows中看到的最大性能問題是由SWT在創建並填充文本的新表項時發送的令人難以置信的本地窗口消息數量引起的。我已經找到了很好的解決方法 - 在填充之前隱藏表格,然後在完成時顯示它。只需在循環之前調用table.setVisible(false),循環之後調用table.setVisible(true)就可以了 - 速度提高了六七倍!
我想加快它的速度。 你會建議什麼?另外,我想知道隱藏這個小部件的這個技巧是如何處理SWT(又名Linux)的非Windows實現的?
這正是解決方案,現在填滿10萬行花費幾乎零時間,相當驚人的功能,謝謝一堆! – Dima 2010-05-12 19:58:46
@ralfstx你能告訴我如何過濾這樣的表格? – 2012-10-30 12:41:30
@AdamArold你可以看一下'DeferredContentProvider'(參見例如[tutorial](http://waynebeaton.wordpress.com/2008/01/16/deferredcontentprovider-my-new-favourite-thing/)) 。但是你應該知道滾動時刷新時可能會出現一些問題:https://bugs.eclipse.org/bugs/show_bug.cgi?id=146799 – hnn 2014-05-20 07:48:08