原程序:Snippet202

 


public class Snippet202 {
	public static void main(String[] args) {
		Display display = new Display();
		final Shell shell = new Shell(display);
		shell.setLayout (new FillLayout());
		final Tree tree = new Tree(shell, SWT.VIRTUAL | SWT.BORDER);
		// 生成节点的总是
		final int[] iArr = new int[1];
		tree.addListener(SWT.SetData, new Listener() {
			public void handleEvent(Event event) {
				System.out.println("Create the "+(++iArr[0]) +" item.");
				TreeItem item = (TreeItem)event.item;
				TreeItem parentItem = item.getParentItem();
				String text = null;
				if (parentItem == null) {
					text = "node "+tree.indexOf(item);
				} else {
					text = parentItem.getText()+" - "+parentItem.indexOf(item);
				}
				item.setText(text);
				// 设置可以接受几个子节点
				item.setItemCount(3);
			}
		});
		// 自动生成几个根节点
		tree.setItemCount(5);
		shell.setSize(400, 300);
		shell.open();
		while (!shell.isDisposed ()) {
			if (!display.readAndDispatch ()) display.sleep ();
		}
		display.dispose ();
	}
}


 

 

注意点:

1,Tree必须设置为SWT.VIRTUAL

2,必须处理SWT.SetData事件

3,tree.setItemCount(5);和item.setItemCount(3);

 

javadoc中对于SWT.VIRTUAL的解释是

TreeItems are to be populated by the client on an on-demand basis instead of up-front.

on-demand 一经要求、请求

up-front 在一开始

就是SWT.VIRTUAL树就是个虚的树,在得到用户、客户要求或者请求的时候才建立树的Item,而这些Item要设置有多少个子Item。