Java/SWT JFace Eclipse/Tree

Материал из Java эксперт
Перейти к: навигация, поиск

Bookmark Organizer

   <source lang="java">

/*******************************************************************************

* All Right Reserved. Copyright (c) 1998, 2004 Jackwind Li Guojie
* 
* Created on 2004-4-27 16:53:36 by JACK $Id$
*  
******************************************************************************/

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern;

import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.ByteArrayTransfer; import org.eclipse.swt.dnd.TransferData; import org.eclipse.swt.dnd.DragSource; import org.eclipse.swt.dnd.DragSourceAdapter; import org.eclipse.swt.dnd.DragSourceEvent; import org.eclipse.swt.dnd.DropTarget; import org.eclipse.swt.dnd.DropTargetAdapter; import org.eclipse.swt.dnd.DropTargetEvent; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem;

/**

* Represents a bookmark.
*
*/

class Bookmark {

 public String name;
 public String href;
 public String addDate;
 public String lastVisited;
 public String lastModified;

} public class BookmarkOrganizer {

 private static String folderLinePrefix = "
<H3 FOLDED"; private static String urlLinePrefix = "
\n"); } } /** * Loads the bookmarks from the specified file. * @param file * @param rootItem */ private void loadBookmark(File file, TreeItem rootItem) { TreeItem parent = rootItem; try { BufferedReader reader = new BufferedReader(new FileReader(file)); String line = null; while ((line = reader.readLine()) != null) { line = line.trim(); if (line.startsWith(folderLinePrefix)) { // a folder. Matcher matcher = folderPattern.matcher(line); if (matcher.find()) { String addDate = matcher.group(1); String name = matcher.group(2); TreeItem item = new TreeItem(parent, SWT.NULL); item.setText(name); item.setData(KEY_ADD_DATE, addDate); item.setImage(iconFolder); parent = item; } } else if (line.startsWith(urlLinePrefix)) { // a url Matcher matcher = urlPattern.matcher(line); if (matcher.find()) { Bookmark bookmark = new Bookmark(); bookmark.href = matcher.group(1); bookmark.addDate = matcher.group(2); bookmark.lastVisited = matcher.group(3); bookmark.lastModified = matcher.group(4); bookmark.name = matcher.group(5); TreeItem item = new TreeItem(parent, SWT.NULL); item.setText(bookmark.name); item.setData(bookmark); item.setImage(iconURL); }
} else if (line.equals("</DL>

")) { // folder boundry. parent = parent.getParentItem(); } } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private void setStatus(String message) { label.setText(message); } public static void main(String[] args) { new BookmarkOrganizer(); } } class BookmarkTransfer extends ByteArrayTransfer { private static final String BOOKMARK_TRANSFER_NAME = "BOOKMARK"; private static final int BOOKMARK_TRANSFER_ID = registerType(BOOKMARK_TRANSFER_NAME); private static final BookmarkTransfer instance = new BookmarkTransfer(); public static BookmarkTransfer getInstance() { return instance; } /* * (non-Javadoc) * * @see org.eclipse.swt.dnd.Transfer#getTypeIds() */ protected int[] getTypeIds() { return new int[] { BOOKMARK_TRANSFER_ID }; } /* * (non-Javadoc) * * @see org.eclipse.swt.dnd.Transfer#getTypeNames() */ protected String[] getTypeNames() { return new String[] { BOOKMARK_TRANSFER_NAME }; } /* * (non-Javadoc) * * @see org.eclipse.swt.dnd.Transfer#javaToNative(java.lang.Object, * org.eclipse.swt.dnd.TransferData) */ protected void javaToNative(Object object, TransferData transferData) { if (object == null || !(object instanceof Bookmark)) return; Bookmark bookmark = (Bookmark) object; if (isSupportedType(transferData)) { try { // Writes data to a byte array. ByteArrayOutputStream stream = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream(stream); out.writeUTF(bookmark.name); out.writeUTF(bookmark.href); out.writeUTF(bookmark.addDate); out.writeUTF(bookmark.lastVisited); out.writeUTF(bookmark.lastModified); out.close(); super.javaToNative(stream.toByteArray(), transferData); } catch (IOException e) { e.printStackTrace(); } } } /* * (non-Javadoc) * * @see org.eclipse.swt.dnd.Transfer#nativeToJava(org.eclipse.swt.dnd.TransferData) */ protected Object nativeToJava(TransferData transferData) { if (isSupportedType(transferData)) { byte[] raw = (byte[]) super.nativeToJava(transferData); if (raw == null) return null; Bookmark bookmark = new Bookmark(); try { ByteArrayInputStream stream = new ByteArrayInputStream(raw); DataInputStream in = new DataInputStream(stream); bookmark.name = in.readUTF(); bookmark.href = in.readUTF(); bookmark.addDate = in.readUTF(); bookmark.lastVisited = in.readUTF(); bookmark.lastModified = in.readUTF(); in.close(); } catch (IOException e) { e.printStackTrace(); return null; } return bookmark; } else { return null; } } } </source>

Category Tree

   <source lang="java">

/******************************************************************************

* Copyright (c) 1998, 2004 Jackwind Li Guojie
* All right reserved. 
* 
* Created on Dec 28, 2003 7:56:40 PM by JACK
* $Id$
* 
* visit: http://www.asprise.ru/swt
*****************************************************************************/

import java.util.Vector; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; public class CategoryTree {

 Display display = new Display();
 Shell shell = new Shell(display);
 
 final Tree tree = new Tree(shell, SWT.BORDER);
 
 Vector categories = new Vector();
 
 public CategoryTree() {
   Category category = new Category("Java libraries", null);
   categories.add(category);
   
   category = new Category("UI Toolkits", category);
   new Category("AWT", category);
   new Category("Swing", category);
   new Category("SWT/JFace", category);
   
   category = new Category("Java IDEs", null);
   categories.add(category);
   
   new Category("Eclipse", category);
   new Category("JBuilder", category);
 }
 
 /**
  * Builds up the tree with traditional approach. 
  *
  */
 public void traditional() {
   for(int i=0; categories != null && i < categories.size(); i++) {
     Category category = (Category)categories.elementAt(i);
     addCategory(null, category);
   }
 }
 
 /**
  * Adds a category to the tree (recursively).
  * @param parentItem
  * @param category
  */
 private void addCategory(TreeItem parentItem, Category category) {
   TreeItem item = null;
   if(parentItem == null) 
     item = new TreeItem(tree, SWT.NONE);
   else
     item = new TreeItem(parentItem, SWT.NONE);
   
   item.setText(category.getName());
   
   Vector subs = category.getSubCategories();
   for(int i=0; subs != null && i < subs.size(); i++)
     addCategory(item, (Category)subs.elementAt(i));
 }
 
 /**
  * Builds up the tree with MVC approach. 
  *
  */
 public void MVC() {
   
   TreeViewer treeViewer = new TreeViewer(tree);
   
   treeViewer.setContentProvider(new ITreeContentProvider() {
     public Object[] getChildren(Object parentElement) {
       Vector subcats = ((Category)parentElement).getSubCategories();
       return subcats == null ? new Object[0] : subcats.toArray();
     }
     
     public Object getParent(Object element) {
       return ((Category)element).getParent();
     }
     
     public boolean hasChildren(Object element) {
       return ((Category)element).getSubCategories() != null;
     }
     
     public Object[] getElements(Object inputElement) {
       if(inputElement != null && inputElement instanceof Vector) {
         return ((Vector)inputElement).toArray();
       }
       return new Object[0];
     }
     
     public void dispose() {
       // 
     }
     
     public void inputChanged(Viewer viewer,
                  Object oldInput,
                  Object newInput) {
       // 
     }
   });
   
   treeViewer.setLabelProvider(new LabelProvider() {
     public String getText(Object element) {
       return ((Category)element).getName();
     }
   });
   
   treeViewer.setInput(categories);
   
 }
 
 public void show() {
   tree.setSize(300, 200);
   shell.setSize(300, 200);
   
   shell.open();
   
   // Set up the event loop.
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch()) {
       // If no more entries in event queue
       display.sleep();
     }
   }
   display.dispose();
 }
 
 public static void main(String[] args) {
   CategoryTree tree = new CategoryTree();
   //tree.traditional();
   tree.MVC();
   tree.show();
 }
 /**
  * Represents a category of items. 
  * The max level of categories is 2 only.
  *
  */
 class Category {
   private String name;
   private Vector subCategories;
   private Category parent;
   
   public Category(String name, Category parent) {
     this.name = name;
     this.parent = parent;
     if(parent != null)
       parent.addSubCategory(this);
   }
   
   public Vector getSubCategories() {
     return subCategories;
   }
   
   private void addSubCategory(Category subcategory) {
     if(subCategories == null)
       subCategories = new Vector();
     if(! subCategories.contains(subcategory))
       subCategories.add(subcategory);
   }
   
   public String getName() {
     return name;
   }
   
   public Category getParent() {
     return parent;
   }
 }  
 

}


      </source>
   
  
 
  



Create a SWT tree (lazy)

   <source lang="java">

/*

* Tree example snippet: create a tree (lazy)
*
* For a list of all SWT example snippets see
* http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets
*/

import java.io.File; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; 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]);
     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 (items[i].getData() != null)
           return;
         items[i].dispose();
       }
       File file = (File) root.getData();
       File[] files = file.listFiles();
       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()) {
           new TreeItem(item, 0);
         }
       }
     }
   });
   Point size = tree.ruputeSize(300, SWT.DEFAULT);
   int width = Math.max(300, size.x);
   int height = Math.max(300, size.y);
   shell.setSize(shell.ruputeSize(width, height));
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch())
       display.sleep();
   }
   display.dispose();
 }

}


      </source>
   
  
 
  



Create a tree

   <source lang="java">

/*

* Tree example snippet: create a tree
*
* For a list of all SWT example snippets see
* http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets
*/

import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; public class Snippet15 {

 public static void main(String[] args) {
   Display display = new Display();
   Shell shell = new Shell(display);
   final Tree tree = new Tree(shell, SWT.BORDER);
   tree.setSize(100, 100);
   shell.setSize(200, 200);
   for (int i = 0; i < 4; i++) {
     TreeItem iItem = new TreeItem(tree, 0);
     iItem.setText("TreeItem (0) -" + i);
     for (int j = 0; j < 4; j++) {
       TreeItem jItem = new TreeItem(iItem, 0);
       jItem.setText("TreeItem (1) -" + j);
       for (int k = 0; k < 4; k++) {
         TreeItem kItem = new TreeItem(jItem, 0);
         kItem.setText("TreeItem (2) -" + k);
         for (int l = 0; l < 4; l++) {
           TreeItem lItem = new TreeItem(kItem, 0);
           lItem.setText("TreeItem (3) -" + l);
         }
       }
     }
   }
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch())
       display.sleep();
   }
   display.dispose();
 }

}


      </source>
   
  
 
  



Demonstrates CheckboxTreeViewer

   <source lang="java">

import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTreeViewer; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProviderChangedEvent; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.window.ApplicationWindow; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.ruposite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; /**

* This class demonstrates the CheckboxTreeViewer
*/

public class CheckFileTree extends FileTree {

 /**
  * Configures the shell
  * 
  * @param shell
  *            the shell
  */
 protected void configureShell(Shell shell) {
   super.configureShell(shell);
   shell.setText("Check File Tree");
 }
 /**
  * Creates the main window"s contents
  * 
  * @param parent
  *            the main window
  * @return Control
  */
 protected Control createContents(Composite parent) {
   Composite composite = new Composite(parent, SWT.NONE);
   composite.setLayout(new GridLayout(1, false));
   // Add a checkbox to toggle whether the labels preserve case
   Button preserveCase = new Button(composite, SWT.CHECK);
   preserveCase.setText("&Preserve case");
   // Create the tree viewer to display the file tree
   final CheckboxTreeViewer tv = new CheckboxTreeViewer(composite);
   tv.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
   tv.setContentProvider(new FileTreeContentProvider());
   tv.setLabelProvider(new FileTreeLabelProvider());
   tv.setInput("root"); // pass a non-null that will be ignored
   // When user checks the checkbox, toggle the preserve case attribute
   // of the label provider
   preserveCase.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent event) {
       boolean preserveCase = ((Button) event.widget).getSelection();
       FileTreeLabelProvider ftlp = (FileTreeLabelProvider) tv
           .getLabelProvider();
       ftlp.setPreserveCase(preserveCase);
     }
   });
   // When user checks a checkbox in the tree, check all its children
   tv.addCheckStateListener(new ICheckStateListener() {
     public void checkStateChanged(CheckStateChangedEvent event) {
       // If the item is checked . . .
       if (event.getChecked()) {
         // . . . check all its children
         tv.setSubtreeChecked(event.getElement(), true);
       }
     }
   });
   return composite;
 }
 /**
  * The application entry point
  * 
  * @param args
  *            the command line arguments
  */
 public static void main(String[] args) {
   new CheckFileTree().run();
 }

} /**

* This class demonstrates TreeViewer. It shows the drives, directories, and
* files on the system.
*/

class FileTree extends ApplicationWindow {

 /**
  * FileTree constructor
  */
 public FileTree() {
   super(null);
 }
 /**
  * Runs the application
  */
 public void run() {
   // Don"t return from open() until window closes
   setBlockOnOpen(true);
   // Open the main window
   open();
   // Dispose the display
   Display.getCurrent().dispose();
 }
 /**
  * Configures the shell
  * 
  * @param shell
  *            the shell
  */
 protected void configureShell(Shell shell) {
   super.configureShell(shell);
   // Set the title bar text and the size
   shell.setText("File Tree");
   shell.setSize(400, 400);
 }
 /**
  * Creates the main window"s contents
  * 
  * @param parent
  *            the main window
  * @return Control
  */
 protected Control createContents(Composite parent) {
   Composite composite = new Composite(parent, SWT.NONE);
   composite.setLayout(new GridLayout(1, false));
   // Add a checkbox to toggle whether the labels preserve case
   Button preserveCase = new Button(composite, SWT.CHECK);
   preserveCase.setText("&Preserve case");
   // Create the tree viewer to display the file tree
   final TreeViewer tv = new TreeViewer(composite);
   tv.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
   tv.setContentProvider(new FileTreeContentProvider());
   tv.setLabelProvider(new FileTreeLabelProvider());
   tv.setInput("root"); // pass a non-null that will be ignored
   // When user checks the checkbox, toggle the preserve case attribute
   // of the label provider
   preserveCase.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent event) {
       boolean preserveCase = ((Button) event.widget).getSelection();
       FileTreeLabelProvider ftlp = (FileTreeLabelProvider) tv
           .getLabelProvider();
       ftlp.setPreserveCase(preserveCase);
     }
   });
   return composite;
 }

} /**

* This class provides the content for the tree in FileTree
*/

class FileTreeContentProvider implements ITreeContentProvider {

 /**
  * Gets the children of the specified object
  * 
  * @param arg0
  *            the parent object
  * @return Object[]
  */
 public Object[] getChildren(Object arg0) {
   // Return the files and subdirectories in this directory
   return ((File) arg0).listFiles();
 }
 /**
  * Gets the parent of the specified object
  * 
  * @param arg0
  *            the object
  * @return Object
  */
 public Object getParent(Object arg0) {
   // Return this file"s parent file
   return ((File) arg0).getParentFile();
 }
 /**
  * Returns whether the passed object has children
  * 
  * @param arg0
  *            the parent object
  * @return boolean
  */
 public boolean hasChildren(Object arg0) {
   // Get the children
   Object[] obj = getChildren(arg0);
   // Return whether the parent has children
   return obj == null ? false : obj.length > 0;
 }
 /**
  * Gets the root element(s) of the tree
  * 
  * @param arg0
  *            the input data
  * @return Object[]
  */
 public Object[] getElements(Object arg0) {
   // These are the root elements of the tree
   // We don"t care what arg0 is, because we just want all
   // the root nodes in the file system
   return File.listRoots();
 }
 /**
  * Disposes any created resources
  */
 public void dispose() {
   // Nothing to dispose
 }
 /**
  * Called when the input changes
  * 
  * @param arg0
  *            the viewer
  * @param arg1
  *            the old input
  * @param arg2
  *            the new input
  */
 public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
   // Nothing to change
 }

} /**

* This class provides the labels for the file tree
*/

class FileTreeLabelProvider implements ILabelProvider {

 // The listeners
 private List listeners;
 // Images for tree nodes
 private Image file;
 private Image dir;
 // Label provider state: preserve case of file names/directories
 boolean preserveCase;
 /**
  * Constructs a FileTreeLabelProvider
  */
 public FileTreeLabelProvider() {
   // Create the list to hold the listeners
   listeners = new ArrayList();
   // Create the images
   try {
     file = new Image(null, new FileInputStream("images/file.gif"));
     dir = new Image(null, new FileInputStream("images/directory.gif"));
   } catch (FileNotFoundException e) {
     // Swallow it; we"ll do without images
   }
 }
 /**
  * Sets the preserve case attribute
  * 
  * @param preserveCase
  *            the preserve case attribute
  */
 public void setPreserveCase(boolean preserveCase) {
   this.preserveCase = preserveCase;
   // Since this attribute affects how the labels are computed,
   // notify all the listeners of the change.
   LabelProviderChangedEvent event = new LabelProviderChangedEvent(this);
   for (int i = 0, n = listeners.size(); i < n; i++) {
     ILabelProviderListener ilpl = (ILabelProviderListener) listeners
         .get(i);
     ilpl.labelProviderChanged(event);
   }
 }
 /**
  * Gets the image to display for a node in the tree
  * 
  * @param arg0
  *            the node
  * @return Image
  */
 public Image getImage(Object arg0) {
   // If the node represents a directory, return the directory image.
   // Otherwise, return the file image.
   return ((File) arg0).isDirectory() ? dir : file;
 }
 /**
  * Gets the text to display for a node in the tree
  * 
  * @param arg0
  *            the node
  * @return String
  */
 public String getText(Object arg0) {
   // Get the name of the file
   String text = ((File) arg0).getName();
   // If name is blank, get the path
   if (text.length() == 0) {
     text = ((File) arg0).getPath();
   }
   // Check the case settings before returning the text
   return preserveCase ? text : text.toUpperCase();
 }
 /**
  * Adds a listener to this label provider
  * 
  * @param arg0
  *            the listener
  */
 public void addListener(ILabelProviderListener arg0) {
   listeners.add(arg0);
 }
 /**
  * Called when this LabelProvider is being disposed
  */
 public void dispose() {
   // Dispose the images
   if (dir != null)
     dir.dispose();
   if (file != null)
     file.dispose();
 }
 /**
  * Returns whether changes to the specified property on the specified
  * element would affect the label for the element
  * 
  * @param arg0
  *            the element
  * @param arg1
  *            the property
  * @return boolean
  */
 public boolean isLabelProperty(Object arg0, String arg1) {
   return false;
 }
 /**
  * Removes the listener
  * 
  * @param arg0
  *            the listener to remove
  */
 public void removeListener(ILabelProviderListener arg0) {
   listeners.remove(arg0);
 }

}

      </source>
   
  
 
  



Demonstrates TableTree

   <source lang="java">

//Send questions, comments, bug reports, etc. to the authors: //Rob Warner (rwarner@interspatial.ru) //Robert Harris (rbrt_harris@yahoo.ru) import org.eclipse.swt.SWT; import org.eclipse.swt.custom.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; /**

* This class demonstrates TableTree
*/

public class TableTreeTest {

 // The number of rows and columns
 private static final int NUM = 3;
 /**
  * Runs the application
  */
 public void run() {
   Display display = new Display();
   Shell shell = new Shell(display);
   shell.setText("TableTree Test");
   createContents(shell);
   shell.pack();
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch()) {
       display.sleep();
     }
   }
   display.dispose();
 }
 /**
  * Creates the main window"s contents
  * 
  * @param shell the main window
  */
 private void createContents(final Shell shell) {
   shell.setLayout(new FillLayout());
   // Create the TableTree and set some attributes on the underlying table
   TableTree tableTree = new TableTree(shell, SWT.NONE);
   Table table = tableTree.getTable();
   table.setHeaderVisible(true);
   table.setLinesVisible(false);
   // Create the columns, passing the underlying table
   for (int i = 0; i < NUM; i++) {
     new TableColumn(table, SWT.LEFT).setText("Column " + (i + 1));
   }
   // Create the data
   for (int i = 0; i < NUM; i++) {
     // Create a parent item and add data to the columns
     TableTreeItem parent = new TableTreeItem(tableTree, SWT.NONE);
     parent.setText(0, "Parent " + (i + 1));
     parent.setText(1, "Data");
     parent.setText(2, "More data");
     // Add children items
     for (int j = 0; j < NUM; j++) {
       // Create a child item and add data to the columns
       TableTreeItem child = new TableTreeItem(parent, SWT.NONE);
       child.setText(0, "Child " + (j + 1));
       child.setText(1, "Some child data");
       child.setText(2, "More child data");
     }
     // Expand the parent item
     parent.setExpanded(true);
   }
   // Pack the columns
   TableColumn[] columns = table.getColumns();
   for (int i = 0, n = columns.length; i < n; i++) {
     columns[i].pack();
   }
 }
 /**
  * The application entry point
  * 
  * @param args the command line arguments
  */
 public static void main(String[] args) {
   new TableTreeTest().run();
 }

}


      </source>
   
  
 
  



Demonstrates TreeEditor

   <source lang="java">

import org.eclipse.swt.SWT; import org.eclipse.swt.custom.*; import org.eclipse.swt.events.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; /**

* This class demonstrates TreeEditor
*/

public class TextTreeEditor {

 // Constant for how many items to create at each level
 private static final int NUM = 3;
 /**
  * Runs the //Send questions, comments, bug reports, etc. to the authors:

//Rob Warner (rwarner@interspatial.ru) //Robert Harris (rbrt_harris@yahoo.ru)application

  */
 public void run() {
   Display display = new Display();
   Shell shell = new Shell(display);
   shell.setText("Text Tree Editor");
   createContents(shell);
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch()) {
       display.sleep();
     }
   }
   display.dispose();
 }
 /**
  * Creates the contents of the main window
  * 
  * @param shell the main window
  */
 public void createContents(Shell shell) {
   shell.setLayout(new FillLayout());
   // Create the tree
   final Tree tree = new Tree(shell, SWT.SINGLE);
   // Fill the tree with data
   for (int i = 0; i < NUM; i++) {
     TreeItem iItem = new TreeItem(tree, SWT.NONE);
     iItem.setText("Item " + (i + 1));
     for (int j = 0; j < NUM; j++) {
       TreeItem jItem = new TreeItem(iItem, SWT.NONE);
       jItem.setText("Sub Item " + (j + 1));
       for (int k = 0; k < NUM; k++) {
         new TreeItem(jItem, SWT.NONE).setText("Sub Sub Item " + (k + 1));
       }
       jItem.setExpanded(true);
     }
     iItem.setExpanded(true);
   }
   // Create the editor and set its attributes
   final TreeEditor editor = new TreeEditor(tree);
   editor.horizontalAlignment = SWT.LEFT;
   editor.grabHorizontal = true;
   // Add a key listener to the tree that listens for F2.
   // If F2 is pressed, we do the editing
   tree.addKeyListener(new KeyAdapter() {
     public void keyPressed(KeyEvent event) {
       // Make sure one and only one item is selected when F2 is pressed
       if (event.keyCode == SWT.F2 && tree.getSelectionCount() == 1) {
         // Determine the item to edit
         final TreeItem item = tree.getSelection()[0];
         // Create a text field to do the editing
         final Text text = new Text(tree, SWT.NONE);
         text.setText(item.getText());
         text.selectAll();
         text.setFocus();
         // If the text field loses focus, set its text into the tree
         // and end the editing session
         text.addFocusListener(new FocusAdapter() {
           public void focusLost(FocusEvent event) {
             item.setText(text.getText());
             text.dispose();
           }
         });
         // If they hit Enter, set the text into the tree and end the editing
         // session. If they hit Escape, ignore the text and end the editing
         // session
         text.addKeyListener(new KeyAdapter() {
           public void keyPressed(KeyEvent event) {
             switch (event.keyCode) {
             case SWT.CR:
               // Enter hit--set the text into the tree and drop through
               item.setText(text.getText());
             case SWT.ESC:
               // End editing session
               text.dispose();
               break;
             }
           }
         });
         // Set the text field into the editor
         editor.setEditor(text, item);
       }
     }
   });
 }
 /**
  * The application entry point
  * 
  * @param args the command line arguments
  */
 public static void main(String[] args) {
   new TextTreeEditor().run();
 }

}


      </source>
   
  
 
  



Demonstrates TreeViewer

   <source lang="java">

import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProviderChangedEvent; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.window.ApplicationWindow; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.ruposite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; /**

* This class demonstrates TreeViewer. It shows the drives, directories, and
* files on the system.
*/

public class FileTree extends ApplicationWindow {

 /**
  * FileTree constructor
  */
 public FileTree() {
   super(null);
 }
 /**
  * Runs the application
  */
 public void run() {
   // Don"t return from open() until window closes
   setBlockOnOpen(true);
   // Open the main window
   open();
   // Dispose the display
   Display.getCurrent().dispose();
 }
 /**
  * Configures the shell
  * 
  * @param shell
  *            the shell
  */
 protected void configureShell(Shell shell) {
   super.configureShell(shell);
   // Set the title bar text and the size
   shell.setText("File Tree");
   shell.setSize(400, 400);
 }
 /**
  * Creates the main window"s contents
  * 
  * @param parent
  *            the main window
  * @return Control
  */
 protected Control createContents(Composite parent) {
   Composite composite = new Composite(parent, SWT.NONE);
   composite.setLayout(new GridLayout(1, false));
   // Add a checkbox to toggle whether the labels preserve case
   Button preserveCase = new Button(composite, SWT.CHECK);
   preserveCase.setText("&Preserve case");
   // Create the tree viewer to display the file tree
   final TreeViewer tv = new TreeViewer(composite);
   tv.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
   tv.setContentProvider(new FileTreeContentProvider());
   tv.setLabelProvider(new FileTreeLabelProvider());
   tv.setInput("root"); // pass a non-null that will be ignored
   // When user checks the checkbox, toggle the preserve case attribute
   // of the label provider
   preserveCase.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent event) {
       boolean preserveCase = ((Button) event.widget).getSelection();
       FileTreeLabelProvider ftlp = (FileTreeLabelProvider) tv
           .getLabelProvider();
       ftlp.setPreserveCase(preserveCase);
     }
   });
   return composite;
 }
 /**
  * The application entry point
  * 
  * @param args
  *            the command line arguments
  */
 public static void main(String[] args) {
   new FileTree().run();
 }

} /**

* This class provides the content for the tree in FileTree
*/

class FileTreeContentProvider implements ITreeContentProvider {

 /**
  * Gets the children of the specified object
  * 
  * @param arg0
  *            the parent object
  * @return Object[]
  */
 public Object[] getChildren(Object arg0) {
   // Return the files and subdirectories in this directory
   return ((File) arg0).listFiles();
 }
 /**
  * Gets the parent of the specified object
  * 
  * @param arg0
  *            the object
  * @return Object
  */
 public Object getParent(Object arg0) {
   // Return this file"s parent file
   return ((File) arg0).getParentFile();
 }
 /**
  * Returns whether the passed object has children
  * 
  * @param arg0
  *            the parent object
  * @return boolean
  */
 public boolean hasChildren(Object arg0) {
   // Get the children
   Object[] obj = getChildren(arg0);
   // Return whether the parent has children
   return obj == null ? false : obj.length > 0;
 }
 /**
  * Gets the root element(s) of the tree
  * 
  * @param arg0
  *            the input data
  * @return Object[]
  */
 public Object[] getElements(Object arg0) {
   // These are the root elements of the tree
   // We don"t care what arg0 is, because we just want all
   // the root nodes in the file system
   return File.listRoots();
 }
 /**
  * Disposes any created resources
  */
 public void dispose() {
   // Nothing to dispose
 }
 /**
  * Called when the input changes
  * 
  * @param arg0
  *            the viewer
  * @param arg1
  *            the old input
  * @param arg2
  *            the new input
  */
 public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
   // Nothing to change
 }

} /**

* This class provides the labels for the file tree
*/

class FileTreeLabelProvider implements ILabelProvider {

 // The listeners
 private List listeners;
 // Images for tree nodes
 private Image file;
 private Image dir;
 // Label provider state: preserve case of file names/directories
 boolean preserveCase;
 /**
  * Constructs a FileTreeLabelProvider
  */
 public FileTreeLabelProvider() {
   // Create the list to hold the listeners
   listeners = new ArrayList();
   // Create the images
   try {
     file = new Image(null, new FileInputStream("images/file.gif"));
     dir = new Image(null, new FileInputStream("images/directory.gif"));
   } catch (FileNotFoundException e) {
     // Swallow it; we"ll do without images
   }
 }
 /**
  * Sets the preserve case attribute
  * 
  * @param preserveCase
  *            the preserve case attribute
  */
 public void setPreserveCase(boolean preserveCase) {
   this.preserveCase = preserveCase;
   // Since this attribute affects how the labels are computed,
   // notify all the listeners of the change.
   LabelProviderChangedEvent event = new LabelProviderChangedEvent(this);
   for (int i = 0, n = listeners.size(); i < n; i++) {
     ILabelProviderListener ilpl = (ILabelProviderListener) listeners
         .get(i);
     ilpl.labelProviderChanged(event);
   }
 }
 /**
  * Gets the image to display for a node in the tree
  * 
  * @param arg0
  *            the node
  * @return Image
  */
 public Image getImage(Object arg0) {
   // If the node represents a directory, return the directory image.
   // Otherwise, return the file image.
   return ((File) arg0).isDirectory() ? dir : file;
 }
 /**
  * Gets the text to display for a node in the tree
  * 
  * @param arg0
  *            the node
  * @return String
  */
 public String getText(Object arg0) {
   // Get the name of the file
   String text = ((File) arg0).getName();
   // If name is blank, get the path
   if (text.length() == 0) {
     text = ((File) arg0).getPath();
   }
   // Check the case settings before returning the text
   return preserveCase ? text : text.toUpperCase();
 }
 /**
  * Adds a listener to this label provider
  * 
  * @param arg0
  *            the listener
  */
 public void addListener(ILabelProviderListener arg0) {
   listeners.add(arg0);
 }
 /**
  * Called when this LabelProvider is being disposed
  */
 public void dispose() {
   // Dispose the images
   if (dir != null)
     dir.dispose();
   if (file != null)
     file.dispose();
 }
 /**
  * Returns whether changes to the specified property on the specified
  * element would affect the label for the element
  * 
  * @param arg0
  *            the element
  * @param arg1
  *            the property
  * @return boolean
  */
 public boolean isLabelProperty(Object arg0, String arg1) {
   return false;
 }
 /**
  * Removes the listener
  * 
  * @param arg0
  *            the listener to remove
  */
 public void removeListener(ILabelProviderListener arg0) {
   listeners.remove(arg0);
 }

}

      </source>
   
  
 
  



Detect a selection or check event in a tree (SWT.CHECK)

   <source lang="java">

/*

* Tree example snippet: detect a selection or check event in a tree (SWT.CHECK)
*
* For a list of all SWT example snippets see
* http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets
*/

import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; public class Snippet114 {

 public static void main(String[] args) {
   Display display = new Display();
   Shell shell = new Shell(display);
   Tree tree = new Tree(shell, SWT.CHECK | SWT.BORDER | SWT.V_SCROLL
       | SWT.H_SCROLL);
   for (int i = 0; i < 12; i++) {
     TreeItem item = new TreeItem(tree, SWT.NONE);
     item.setText("Item " + i);
   }
   tree.setSize(100, 100);
   tree.addListener(SWT.Selection, new Listener() {
     public void handleEvent(Event event) {
       String string = event.detail == SWT.CHECK ? "Checked"
           : "Selected";
       System.out.println(event.item + " " + string);
     }
   });
   shell.setSize(200, 200);
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch())
       display.sleep();
   }
   display.dispose();
 }

}


      </source>
   
  
 
  



Detect Mouse Down In SWT Tree Item

   <source lang="java">

/*

* Tree example snippet: detect mouse down in a tree item
*
* For a list of all SWT example snippets see
* http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets
*/

import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; public class DetectMouseDownInTreeItem {

 public static void main(String[] args) {
   Display display = new Display();
   Shell shell = new Shell(display);
   final Tree tree = new Tree(shell, SWT.BORDER | SWT.MULTI);
   for (int i = 0; i < 12; i++) {
     TreeItem treeItem = new TreeItem(tree, SWT.NONE);
     treeItem.setText("Item " + i);
   }
   tree.addListener(SWT.MouseDown, new Listener() {
     public void handleEvent(Event event) {
       Point point = new Point(event.x, event.y);
       TreeItem item = tree.getItem(point);
       if (item != null) {
         System.out.println("Mouse down: " + item);
       }
     }
   });
   tree.setSize(200, 200);
   shell.setSize(300, 300);
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch())
       display.sleep();
   }
   display.dispose();
 }

}


      </source>
   
  
 
  



Displays a single-selection tree, a multi-selection tree, and a checkbox tree

   <source lang="java">

//Send questions, comments, bug reports, etc. to the authors: //Rob Warner (rwarner@interspatial.ru) //Robert Harris (rbrt_harris@yahoo.ru) import org.eclipse.swt.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; /**

* Displays a single-selection tree, a multi-selection tree, and a checkbox tree
*/

public class SWTTreeExample {

 /**
  * Runs the application
  */
 public void run() {
   Display display = new Display();
   Shell shell = new Shell(display);
   shell.setText("TreeExample");
   createContents(shell);
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch()) {
       display.sleep();
     }
   }
   display.dispose();
 }
 private void createContents(Composite composite) {
   // Set the single-selection tree in the upper left,
   // the multi-selection tree in the upper right,
   // and the checkbox tree across the bottom.
   // To do this, create a 1x2 grid, and in the top
   // cell, a 2x1 grid.
   composite.setLayout(new GridLayout(1, true));
   Composite top = new Composite(composite, SWT.NONE);
   GridData data = new GridData(GridData.FILL_BOTH);
   top.setLayoutData(data);
   top.setLayout(new GridLayout(2, true));
   Tree single = new Tree(top, SWT.SINGLE | SWT.BORDER);
   data = new GridData(GridData.FILL_BOTH);
   single.setLayoutData(data);
   fillTree(single);
   Tree multi = new Tree(top, SWT.MULTI | SWT.BORDER);
   data = new GridData(GridData.FILL_BOTH);
   multi.setLayoutData(data);
   fillTree(multi);
   Tree check = new Tree(composite, SWT.CHECK | SWT.BORDER);
   data = new GridData(GridData.FILL_BOTH);
   check.setLayoutData(data);
   fillTree(check);
 }
 /**
  * Helper method to fill a tree with data
  * 
  * @param tree the tree to fill
  */
 private void fillTree(Tree tree) {
   // Turn off drawing to avoid flicker
   tree.setRedraw(false);
   // Create five root items
   for (int i = 0; i < 5; i++) {
     TreeItem item = new TreeItem(tree, SWT.NONE);
     item.setText("Root Item " + i);
     // Create three children below the root
     for (int j = 0; j < 3; j++) {
       TreeItem child = new TreeItem(item, SWT.NONE);
       child.setText("Child Item " + i + " - " + j);
       // Create three grandchildren under the child
       for (int k = 0; k < 3; k++) {
         TreeItem grandChild = new TreeItem(child, SWT.NONE);
         grandChild.setText("Grandchild Item " + i + " - " + j + " - " + k);
       }
     }
   }
   // Turn drawing back on!
   tree.setRedraw(true);
 }
 /**
  * The entry point for the application
  * 
  * @param args the command line arguments
  */
 public static void main(String[] args) {
   new SWTTreeExample().run();
 }

}


      </source>
   
  
 
  



Insert a SWT tree item (at an index)

   <source lang="java">

/*

* Tree example snippet: insert a tree item (at an index)
*
* For a list of all SWT example snippets see
* http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets
*/

import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; public class Snippet102 {

 public static void main(String[] args) {
   Display display = new Display();
   Shell shell = new Shell(display);
   Tree tree = new Tree(shell, SWT.BORDER | SWT.MULTI);
   tree.setSize(200, 200);
   for (int i = 0; i < 12; i++) {
     TreeItem item = new TreeItem(tree, SWT.NONE);
     item.setText("Item " + i);
   }
   TreeItem item = new TreeItem(tree, SWT.NONE, 1);
   TreeItem[] items = tree.getItems();
   int index = 0;
   while (index < items.length && items[index] != item)
     index++;
   item.setText("*** New Item " + index + " ***");
   shell.pack();
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch())
       display.sleep();
   }
   display.dispose();
 }

}


      </source>
   
  
 
  



Limit selection to items that match a pattern in SWT Tree

   <source lang="java">

/*

* Tree example snippet: limit selection to items that match a pattern
*
* For a list of all SWT example snippets see
* http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets
*/

import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; public class Snippet80 {

 public static void main(String[] args) {
   final Display display = new Display();
   final Shell shell = new Shell(display);
   shell.setLayout(new FillLayout());
   final Tree tree = new Tree(shell, SWT.BORDER | SWT.MULTI);
   for (int i = 0; i < 2; i++) {
     TreeItem item = new TreeItem(tree, SWT.NONE);
     item.setText("item " + i);
     for (int j = 0; j < 2; j++) {
       TreeItem subItem = new TreeItem(item, SWT.NONE);
       subItem.setText("item " + j);
       for (int k = 0; k < 2; k++) {
         TreeItem subsubItem = new TreeItem(subItem, SWT.NONE);
         subsubItem.setText("item " + k);
       }
     }
   }
   tree.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent e) {
       TreeItem[] selection = tree.getSelection();
       TreeItem[] revisedSelection = new TreeItem[0];
       for (int i = 0; i < selection.length; i++) {
         String text = selection[i].getText();
         if (text.indexOf("1") > 0) {
           TreeItem[] newSelection = new TreeItem[revisedSelection.length + 1];
           System.arraycopy(revisedSelection, 0, newSelection, 0,
               revisedSelection.length);
           newSelection[revisedSelection.length] = selection[i];
           revisedSelection = newSelection;
         }
       }
       tree.setSelection(revisedSelection);
     }
   });
   shell.setSize(300, 300);
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch())
       display.sleep();
   }
   display.dispose();
 }

}


      </source>
   
  
 
  



Print selected items in a SWT tree

   <source lang="java">

/*

* Tree example snippet: print selected items in a tree
*
* For a list of all SWT example snippets see
* http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets
*/

import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; public class Snippet61 {

 public static void main(String[] args) {
   Display display = new Display();
   Shell shell = new Shell(display);
   final Tree tree = new Tree(shell, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
   for (int i = 0; i < 4; i++) {
     TreeItem item0 = new TreeItem(tree, 0);
     item0.setText("Item " + i);
     for (int j = 0; j < 4; j++) {
       TreeItem item1 = new TreeItem(item0, 0);
       item1.setText("SubItem " + i + " " + j);
       for (int k = 0; k < 4; k++) {
         TreeItem item2 = new TreeItem(item1, 0);
         item2.setText("SubItem " + i + " " + j + " " + k);
       }
     }
   }
   tree.setBounds(0, 0, 100, 100);
   tree.addListener(SWT.Selection, new Listener() {
     public void handleEvent(Event e) {
       String string = "";
       TreeItem[] selection = tree.getSelection();
       for (int i = 0; i < selection.length; i++)
         string += selection[i] + " ";
       System.out.println("Selection={" + string + "}");
     }
   });
   tree.addListener(SWT.DefaultSelection, new Listener() {
     public void handleEvent(Event e) {
       String string = "";
       TreeItem[] selection = tree.getSelection();
       for (int i = 0; i < selection.length; i++)
         string += selection[i] + " ";
       System.out.println("DefaultSelection={" + string + "}");
     }
   });
   tree.addListener(SWT.Expand, new Listener() {
     public void handleEvent(Event e) {
       System.out.println("Expand={" + e.item + "}");
     }
   });
   tree.addListener(SWT.Collapse, new Listener() {
     public void handleEvent(Event e) {
       System.out.println("Collapse={" + e.item + "}");
     }
   });
   tree.getItems()[0].setExpanded(true);
   shell.pack();
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch())
       display.sleep();
   }
   display.dispose();
 }

}

      </source>
   
  
 
  



Simple Tree

   <source lang="java">

/******************************************************************************

* All Right Reserved. 
* Copyright (c) 1998, 2004 Jackwind Li Guojie
* 
* Created on Mar 10, 2004 8:08:56 PM by JACK
* $Id$
* 
*****************************************************************************/

import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; public class SWTSimpleTree {

 Display display = new Display();
 Shell shell = new Shell(display);
 
 Tree tree;
 public SWTSimpleTree() {
   shell.setLayout(new GridLayout());
   
   tree = new Tree(shell, SWT.BORDER);
   
   tree.setLayoutData(new GridData(GridData.FILL_BOTH));
   
   TreeItem item = new TreeItem(tree, SWT.NULL);
   item.setText("ITEM");
   
   TreeItem item2 = new TreeItem(item, SWT.NULL);
   item2.setText("ITEM2");
   
   TreeItem item3 = new TreeItem(item2, SWT.NULL);
   item3.setText("ITEM3");
   
   System.out.println("item: " + item.getParent() + ", " + item.getParentItem());
   System.out.println("item2: " + item2.getParent() + ", " + item2.getParentItem());
   
   System.out.println(tree.getItemCount());
   System.out.println(tree.getItems().length);
   
   shell.setSize(300, 200);
   shell.open();
   //textUser.forceFocus();
   // Set up the event loop.
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch()) {
       // If no more entries in event queue
       display.sleep();
     }
   }
   display.dispose();
 }
 private void init() {
 }
 public static void main(String[] args) {
   new SWTSimpleTree();
 }

}


      </source>
   
  
 
  



SWT Tree

   <source lang="java">

/*

* Created on Nov 20, 2003
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/

import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; /**

* @author Steven Holzner
* 
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/

public class SWTTrees {

 public static void main(String[] args) {
   Display display = new Display();
   Shell shell = new Shell(display);
   shell.setText("Trees");
   final Tree tree = new Tree(shell, SWT.BORDER);
   tree.setSize(290, 290);
   shell.setSize(300, 300);
   for (int loopIndex1 = 0; loopIndex1 < 5; loopIndex1++) {
     TreeItem item0 = new TreeItem(tree, 0);
     item0.setText("Level 0 Item " + loopIndex1);
     for (int loopIndex2 = 0; loopIndex2 < 5; loopIndex2++) {
       TreeItem item1 = new TreeItem(item0, 0);
       item1.setText("Level 1 Item " + loopIndex2);
       for (int loopIndex3 = 0; loopIndex3 < 5; loopIndex3++) {
         TreeItem item2 = new TreeItem(item1, 0);
         item2.setText("Level 2 Item " + loopIndex3);
       }
     }
   }
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch())
       display.sleep();
   }
   display.dispose();
 }

}


      </source>
   
  
 
  



SWT Tree Composite

   <source lang="java">

/* SWT/JFace in Action GUI Design with Eclipse 3.0 Matthew Scarpino, Stephen Holder, Stanford Ng, and Laurent Mihalkovic ISBN: 1932394273 Publisher: Manning

  • /

import java.util.ArrayList; import java.util.List; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.ruposite; public class Ch8TreeComposite extends Composite {

 public Ch8TreeComposite(Composite parent) {
   super(parent, SWT.NULL);
   populateControl();
 }
 protected void populateControl() {
   FillLayout compositeLayout = new FillLayout();
   setLayout(compositeLayout);
   int[] selectionStyle = { SWT.SINGLE, SWT.MULTI };
   int[] checkStyle = { SWT.NONE, SWT.CHECK };
   for (int selection = 0; selection < selectionStyle.length; selection++) {
     for (int check = 0; check < checkStyle.length; check++) {
       int style = selectionStyle[selection] | checkStyle[check];
       createTreeViewer(style);
     }
   }
 }
 private void createTreeViewer(int style) {
   TreeViewer viewer = new TreeViewer(this, style);
   viewer.setContentProvider(new ITreeContentProvider() {
     public Object[] getChildren(Object parentElement) {
       return ((TreeNode) parentElement).getChildren().toArray();
     }
     public Object getParent(Object element) {
       return ((TreeNode) element).getParent();
     }
     public boolean hasChildren(Object element) {
       return ((TreeNode) element).getChildren().size() > 0;
     }
     public Object[] getElements(Object inputElement) {
       return ((TreeNode) inputElement).getChildren().toArray();
     }
     public void dispose() {
     }
     public void inputChanged(Viewer viewer, Object oldInput,
         Object newInput) {
     }
   });
   viewer.setInput(getRootNode());
 }
 private TreeNode getRootNode() {
   TreeNode root = new TreeNode("root");
   root.addChild(new TreeNode("child 1").addChild(new TreeNode(
       "subchild 1")));
   root.addChild(new TreeNode("child 2").addChild(new TreeNode(
       "subchild 2").addChild(new TreeNode("grandchild 1"))));
   return root;
 }

} class TreeNode {

 private String name;
 private List children = new ArrayList();
 private TreeNode parent;
 public TreeNode(String n) {
   name = n;
 }
 protected Object getParent() {
   return parent;
 }
 public TreeNode addChild(TreeNode child) {
   children.add(child);
   child.parent = this;
   return this;
 }
 public List getChildren() {
   return children;
 }
 public String toString() {
   return name;
 }

}

      </source>
   
  
 
  



SWT Tree Simple Demo

   <source lang="java">

import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; public class TreeClass {

 public static void main(String[] args) {
   Display display = new Display();
   Shell shell = new Shell(display);
   shell.setText("Tree Example");
   final Text text = new Text(shell, SWT.BORDER);
   text.setBounds(0, 270, 290, 25);
   final Tree tree = new Tree(shell, SWT.CHECK | SWT.BORDER | SWT.V_SCROLL
       | SWT.H_SCROLL);
   tree.setSize(290, 260);
   shell.setSize(300, 330);
   for (int loopIndex0 = 0; loopIndex0 < 10; loopIndex0++) {
     TreeItem treeItem0 = new TreeItem(tree, 0);
     treeItem0.setText("Level 0 Item " + loopIndex0);
     for (int loopIndex1 = 0; loopIndex1 < 10; loopIndex1++) {
       TreeItem treeItem1 = new TreeItem(treeItem0, 0);
       treeItem1.setText("Level 1 Item " + loopIndex1);
       for (int loopIndex2 = 0; loopIndex2 < 10; loopIndex2++) {
         TreeItem treeItem2 = new TreeItem(treeItem1, 0);
         treeItem2.setText("Level 2 Item " + loopIndex2);
       }
     }
   }
   tree.addListener(SWT.Selection, new Listener() {
     public void handleEvent(Event event) {
       if (event.detail == SWT.CHECK) {
         text.setText(event.item + " was checked.");
       } else {
         text.setText(event.item + " was selected");
       }
     }
   });
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch())
       display.sleep();
   }
   display.dispose();
 }

}


      </source>
   
  
 
  



SWT Tree With Multi columns

   <source lang="java">

/*

* Create a Tree with columns
* 
* For a list of all SWT example snippets see
* http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets
*/

import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.swt.widgets.TreeItem; public class CreateTreeWithcolumns {

 public static void main(String[] args) {
   Display display = new Display();
   final Shell shell = new Shell(display);
   shell.setLayout(new FillLayout());
   Tree tree = new Tree(shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
   tree.setHeaderVisible(true);
   TreeColumn column1 = new TreeColumn(tree, SWT.LEFT);
   column1.setText("Column 1");
   column1.setWidth(200);
   TreeColumn column2 = new TreeColumn(tree, SWT.CENTER);
   column2.setText("Column 2");
   column2.setWidth(200);
   TreeColumn column3 = new TreeColumn(tree, SWT.RIGHT);
   column3.setText("Column 3");
   column3.setWidth(200);
   for (int i = 0; i < 4; i++) {
     TreeItem item = new TreeItem(tree, SWT.NONE);
     item.setText(new String[] { "item " + i, "abc", "defghi" });
     for (int j = 0; j < 4; j++) {
       TreeItem subItem = new TreeItem(item, SWT.NONE);
       subItem
           .setText(new String[] { "subitem " + j, "jklmnop",
               "qrs" });
       for (int k = 0; k < 4; k++) {
         TreeItem subsubItem = new TreeItem(subItem, SWT.NONE);
         subsubItem.setText(new String[] { "subsubitem " + k, "tuv",
             "wxyz" });
       }
     }
   }
   shell.pack();
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch()) {
       display.sleep();
     }
   }
   display.dispose();
 }

}


      </source>
   
  
 
  



Tree Example

   <source lang="java">

import org.eclipse.swt.SWT; import org.eclipse.swt.layout.*; import org.eclipse.swt.events.*; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.*; public class TreeShellExample {

       Display d;
       Shell s;
       TreeShellExample()    {
           d = new Display();
           s = new Shell(d);
           
           s.setSize(250,200);
           
           s.setText("A Table Shell Example");
           s.setLayout(new FillLayout());
           Tree t = new Tree(s, SWT.SINGLE | SWT.BORDER);
           TreeItem child1 = new TreeItem(t, SWT.NONE, 0);
           child1.setText("1");
           TreeItem child2 = new TreeItem(t, SWT.NONE, 1);
           child2.setText("2");
           TreeItem child2a = new TreeItem(child2, SWT.NONE, 0);
           child2a.setText("2A");
           TreeItem child2b = new TreeItem(child2, SWT.NONE, 1);
           child2b.setText("2B");
           TreeItem child3 = new TreeItem(t, SWT.NONE, 2);
           child3.setText("3");
           s.open();
           while(!s.isDisposed()){
               if(!d.readAndDispatch())
                   d.sleep();
           }
           d.dispose();
       }
       public static void main(String[] argv){
         new TreeShellExample();
       }

}

      </source>
   
  
 
  



Tree Example 2

   <source lang="java">

import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TreeEvent; import org.eclipse.swt.events.TreeListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.List; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; public class TreeShellExample2 {

 Display d;
 Shell s;
 TreeShellExample2() {
   d = new Display();
   s = new Shell(d);
   s.setSize(250, 200);
   
   s.setText("A Tree Shell Example");
   s.setLayout(new FillLayout(SWT.HORIZONTAL));
   final Tree t = new Tree(s, SWT.SINGLE | SWT.BORDER);
   final TreeItem child1 = new TreeItem(t, SWT.NONE, 0);
   child1.setText("1");
   child1.setImage(new Image(d, "c:\\icons\\folder.gif"));
   final TreeItem child2 = new TreeItem(t, SWT.NONE, 1);
   child2.setText("2");
   child2.setImage(new Image(d, "c:\\icons\\folder.gif"));
   final TreeItem child2a = new TreeItem(child2, SWT.NONE, 0);
   child2a.setText("2A");
   final TreeItem child2b = new TreeItem(child2, SWT.NONE, 1);
   child2b.setText("2B");
   final TreeItem child3 = new TreeItem(t, SWT.NONE, 2);
   child3.setText("3");
   child3.setImage(new Image(d, "c:\\icons\\folder.gif"));
   final List l = new List(s, SWT.BORDER | SWT.SINGLE);
   t.addTreeListener(new TreeListener() {
     public void treeExpanded(TreeEvent e) {
       TreeItem ti = (TreeItem) e.item;
       ti.setImage(new Image(d, "c:\\icons\\open.gif"));
     }
     public void treeCollapsed(TreeEvent e) {
       TreeItem ti = (TreeItem) e.item;
       ti.setImage(new Image(d, "c:\\icons\\folder.gif"));
     }
   });
   t.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent e) {
       TreeItem ti = (TreeItem) e.item;
       populateList(ti.getText());
     }
     private void populateList(String type) {
       if (type.equals("1")) {
         l.removeAll();
         l.add("File 1");
         l.add("File 2");
       }
       if (type.equals("2")) {
         l.removeAll();
       }
       if (type.equals("2A")) {
         l.removeAll();
         l.add("File 3");
         l.add("File 4");
       }
       if (type.equals("2B")) {
         l.removeAll();
         l.add("File 5");
         l.add("File 6");
       }
       if (type.equals("3")) {
         l.removeAll();
         l.add("File 7");
         l.add("File 8");
       }
     }
   });
   s.open();
   while (!s.isDisposed()) {
     if (!d.readAndDispatch())
       d.sleep();
   }
   d.dispose();
 }
 public static void main(String[] argv) {
   new TreeShellExample2();
 }

}

      </source>