import org.eclipse.swt.*; import org.eclipse.swt.dnd.*; import org.eclipse.swt.graphics.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; /** * @author Thomas Singer */ public class TreeSnippet { public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new FillLayout()); final Tree tree = new Tree(shell, SWT.BORDER | SWT.FULL_SELECTION); for (int i = 0; i < 4; i++) { TreeItem iItem = new TreeItem(tree, 0); iItem.setData("TreeItem (0) -" + i); for (int j = 0; j < 4; j++) { TreeItem jItem = new TreeItem(iItem, 0); jItem.setData("TreeItem (1) -" + j); for (int k = 0; k < 4; k++) { TreeItem kItem = new TreeItem(jItem, 0); kItem.setData("TreeItem (2) -" + k); for (int l = 0; l < 4; l++) { TreeItem lItem = new TreeItem(kItem, 0); lItem.setData("TreeItem (3) -" + l); } } } } final Listener listener = new Listener() { @Override public void handleEvent(Event event) { if (event.type == SWT.EraseItem) { event.detail &= ~SWT.FOREGROUND; } else if (event.type == SWT.MeasureItem) { final TreeItem item = (TreeItem)event.item; final String text = (String)item.getData(); final Point size = event.gc.stringExtent(text); event.width = size.x; event.height = size.y; } else if (event.type == SWT.PaintItem) { final TreeItem item = (TreeItem)event.item; final String text = (String)item.getData(); event.gc.drawString(text, event.x, event.y, true); } } }; tree.addListener(SWT.EraseItem, listener); tree.addListener(SWT.MeasureItem, listener); tree.addListener(SWT.PaintItem, listener); final DragSource source = new DragSource(tree, DND.DROP_MOVE); source.setTransfer(new Transfer[]{FileTransfer.getInstance()}); source.addDragListener(new DragSourceAdapter() { @Override public void dragStart(DragSourceEvent event) { event.doit = false; } }); new Text(shell, SWT.BORDER); shell.setSize(400, 200); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } display.dispose(); } }