capint
11/3/2015 - 7:34 PM

Eclipse >> SWT >> Virtual Table / Tree

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);