Hallo,
De standaard Table widget en de TableViewer JFace viewer zijn er niet op gemaakt om veel records weer te geven. Dit vanwege het feit dat alle records al als objecten in de tabel widget gezet worden. Zo duurt het met 100.000 records minuten (danwel uren) voordat alles op het scherm staat.
Ik vond in de eclipse newsgroups het volgende:
maar deze code werkt op Eclipse 2.0.1 niet helemaal goed. Iemand die hier wat licht op kan schijnen?
De standaard Table widget en de TableViewer JFace viewer zijn er niet op gemaakt om veel records weer te geven. Dit vanwege het feit dat alle records al als objecten in de tabel widget gezet worden. Zo duurt het met 100.000 records minuten (danwel uren) voordat alles op het scherm staat.
Ik vond in de eclipse newsgroups het volgende:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
| package org.eclipse.swt.widgets; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.internal.win32.LRESULT; import org.eclipse.swt.internal.win32.LVITEM; import org.eclipse.swt.internal.win32.NMHDR; import org.eclipse.swt.internal.win32.NMLISTVIEW; import org.eclipse.swt.internal.win32.OS; import org.eclipse.swt.internal.win32.TCHAR; /** * @author Administrator * */ public class LargeTable extends Table { private ITableLabelProvider m_LabelProvider; public LargeTable(Composite parent, int style) { super(parent, checkStyle(style)); } public void setLabelProvider(ITableLabelProvider labelProvider) { m_LabelProvider = labelProvider; } int widgetStyle() { int bits = super.widgetStyle(); //bits |= 0x1000; return bits; } // When it overrides the super function, we don't see records void createItem2(TableItem item, int index) { } public void createItems(int cnt) { items = new TableItem[cnt]; for (int i = 0; i < cnt; i++) { LVITEM lvItem = new LVITEM(); lvItem.iItem = i; lvItem.iImage = OS.I_IMAGENONE; lvItem.mask = OS.LVIF_IMAGE; // items[i] = new TableItem(this, SWT.NONE); } // OS.SendMessage(handle, 0x1000 + 47, cnt, 0); } LRESULT wmNotifyChild(int wParam, int lParam) { NMHDR hdr = new NMHDR(); OS.MoveMemory(hdr, lParam, NMHDR.sizeof); switch (hdr.code) { case 0xFFFFFF4F : { //System.out.println NMLISTVIEW pnmlv = new NMLISTVIEW(); OS.MoveMemory(pnmlv, lParam, NMLISTVIEW.sizeof); // int item = pnmlv.iSubItem; int subItem = pnmlv.uNewState; /*if ((pnmlv.iItem & OS.LVIF_IMAGE) != 0) { if ((m_LabelProvider != null) && (subItem == 0)) { Image image = m_LabelProvider.getColumnImage(new Integer(item), subItem); pnmlv.lParam = imageIndex(image); OS.MoveMemory(lParam, pnmlv, NMLISTVIEW.sizeof); } }*/ if ((pnmlv.iItem & OS.LVIF_TEXT) != 0) { String string; if (m_LabelProvider != null) string = m_LabelProvider.getColumnText(new Integer(item), subItem); else string = ""; TCHAR buffer = new TCHAR(getCodePage(), string, true); int byteCount = buffer.length() * TCHAR.sizeof; OS.MoveMemory(pnmlv.x, buffer, byteCount); } } } // switch return super.wmNotifyChild(wParam, lParam); } } |
maar deze code werkt op Eclipse 2.0.1 niet helemaal goed. Iemand die hier wat licht op kan schijnen?