原文来自:Snippet8
SWT中的树可以利用SWT.Expand事件实现懒加载。
public class Snippet8 { public static void main (String [] args) { final Display display = new Display (); final Shell shell = new Shell (display); shell.setText ("Lazy Tree"); shell.setLayout (new FillLayout ()); final Tree tree = new Tree (shell, SWT.BORDER); File [] roots = File.listRoots (); for (int i=0; i<roots.length; i++) { TreeItem root = new TreeItem (tree, 0); root.setText(roots[i].toString()); root.setData(roots[i]); // display '+' default. new TreeItem(root, 0); } tree.addListener(SWT.Expand, new Listener () { public void handleEvent (final Event event) { final TreeItem root = (TreeItem) event.item; TreeItem[] items = root.getItems (); for(int i= 0; i<items.length; i++) { // if have added children for the item, just return. if(items[i].getData() != null) return; items[i].dispose(); } File file = (File) root.getData(); File[] files = file.listFiles(); // disc return if(files == null) return; for(int i= 0; i<files.length; i++) { TreeItem item = new TreeItem(root, 0); item.setText(files[i].getName()); item.setData(files[i]); if(files[i].isDirectory()) { // display '+' only for directory. new TreeItem(item, 0); } } } }); Point size = tree.computeSize(300, SWT.DEFAULT); int width = Math.max(300, size.x); int height = Math.max(300, size.y); shell.setSize (shell.computeSize (width, height)); shell.open (); while (!shell.isDisposed ()) { if (!display.readAndDispatch ()) display.sleep (); } display.dispose (); } }
保证根节点的+图像 写道
// display '+' default.
new TreeItem(root, 0);
new TreeItem(root, 0);
不重复加载 写道
// if have added children for the item, just return.
if(items[i].getData() != null)
return;
if(items[i].getData() != null)
return;