Eclipse >> SWT >> Virtual Table / Tree
final Tree tree = new Tree(parent, SWT.VIRTUAL | SWT.BORDER);
File [] roots = File.listRoots();
tree.setData(roots);
tree.addListener(SWT.SetData, new Listener() {
public void handleEvent(Event event) {
TreeItem item = (TreeItem)event.item;
TreeItem parentItem = item.getParentItem();
File file = null;
if (parentItem == null) {
/* root-level item */
File [] files = (File [])tree.getData();
file = files [event.index];
item.setText(file.toString());
} else {
File [] files = (File [])parentItem.getData();
file = files [event.index];
item.setText(file.getName());
}
if (file.isDirectory()) {
File [] files = file.listFiles();
if (files != null) {
item.setData(files);
item.setItemCount(files.length);
}
}
}
});
tree.setItemCount(roots.length
final int COUNT = 100000;
final int PAGE_SIZE = 64;
//*** Creates the Table. In order to create a virtual Table, SWT.VIRTUAL is
//specified in its constructor's style argument
final Table table = new Table (shell, SWT.VIRTUAL | SWT.BORDER);
//*** Adds a SWT.SetData listener to the Table. This is the listener that is
//responsible for setting the data on the item
table.addListener (SWT.SetData, new Listener () {
public void handleEvent (Event event) {
TableItem item = (TableItem) event.item;
int index = event.index;
int page = index / PAGE_SIZE;
int start = page * PAGE_SIZE;
int end = start + PAGE_SIZE;
end = Math.min (end, table.getItemCount ());
for (int i = start; i < end; i++) {
item = table.getItem (i);
//*** Sets the data on all of the items on this logical page.
//The SWT.SetData listener will not be subsequently invoked for any of these items.
item.setText ("Item " + i);
}
}
});
//*** Sets the item count of the Table to 10000
table.setItemCount (COUNT);