SWT Jface Eclipse Java

//Send questions, comments, bug reports, etc. to the authors:
//Rob Warner (rwarner@interspatial.com)
//Robert Harris (rbrt_harris@yahoo.com)
import java.io.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
/**
 * Creates a tabbed display with four tabs, and a few controls on each page
 */
public class TabComplex {
  private static final String IMAGE_PATH = "images"
      + System.getProperty("file.separator");
  private Image circle;
  private Image square;
  private Image triangle;
  private Image star;
  
  /**
   * Runs the application
   */
  public void run() {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());
    shell.setText("Complex Tabs");
    createImages(shell);
    createContents(shell);
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        display.sleep();
      }
    }
    display.dispose();
  }
  /**
   * Creates the contents
   * 
   * @param shell the parent shell
   */
  private void createContents(Shell shell) {
    // Create the containing tab folder
    final TabFolder tabFolder = new TabFolder(shell, SWT.NONE);
    // Create each tab and set its text, tool tip text,
    // image, and control
    TabItem one = new TabItem(tabFolder, SWT.NONE);
    one.setText("one");
    one.setToolTipText("This is tab one");
    one.setImage(circle);
    one.setControl(getTabOneControl(tabFolder));
    TabItem two = new TabItem(tabFolder, SWT.NONE);
    two.setText("two");
    two.setToolTipText("This is tab two");
    two.setImage(square);
    two.setControl(getTabTwoControl(tabFolder));
    TabItem three = new TabItem(tabFolder, SWT.NONE);
    three.setText("three");
    three.setToolTipText("This is tab three");
    three.setImage(triangle);
    three.setControl(getTabThreeControl(tabFolder));
    TabItem four = new TabItem(tabFolder, SWT.NONE);
    four.setText("four");
    four.setToolTipText("This is tab four");
    four.setImage(star);
    // Select the third tab (index is zero-based)
    tabFolder.setSelection(2);
    // Add an event listener to write the selected tab to stdout
    tabFolder.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(org.eclipse.swt.events.SelectionEvent event) {
        System.out.println(tabFolder.getSelection()[0].getText() + " selected");
      }
    });
  }
  /**
   * Creates the images
   * 
   * @param shell the parent shell
   */
  private void createImages(Shell shell) {
    try {
      circle = new Image(shell.getDisplay(), new FileInputStream(IMAGE_PATH
          + "circle.gif"));
      square = new Image(shell.getDisplay(), new FileInputStream(IMAGE_PATH
          + "square.gif"));
      star = new Image(shell.getDisplay(), new FileInputStream(IMAGE_PATH
          + "star.gif"));
      triangle = new Image(shell.getDisplay(), new FileInputStream(IMAGE_PATH
          + "triangle.gif"));
    } catch (IOException e) {
      // Images not found; handle gracefully
    }
  }
  /**
   * Disposes the images
   */
  private void disposeImages() {
    if (circle != null)
      circle.dispose();
    if (square != null)
      square.dispose();
    if (star != null)
      star.dispose();
    if (triangle != null)
      triangle.dispose();
  }
  /**
   * Gets the control for tab one
   * 
   * @param tabFolder the parent tab folder
   * @return Control
   */
  private Control getTabOneControl(TabFolder tabFolder) {
    // Create a composite and add four buttons to it
    Composite composite = new Composite(tabFolder, SWT.NONE);
    composite.setLayout(new FillLayout(SWT.VERTICAL));
    new Button(composite, SWT.PUSH).setText("Button one");
    new Button(composite, SWT.PUSH).setText("Button two");
    new Button(composite, SWT.PUSH).setText("Button three");
    new Button(composite, SWT.PUSH).setText("Button four");
    return composite;
  }
  /**
   * Gets the control for tab two
   * 
   * @param tabFolder the parent tab folder
   * @return Control
   */
  private Control getTabTwoControl(TabFolder tabFolder) {
    // Create a multi-line text field
    return new Text(tabFolder, SWT.BORDER | SWT.MULTI | SWT.WRAP);
  }
  /**
   * Gets the control for tab three
   * 
   * @param tabFolder the parent tab folder
   * @return Control
   */
  private Control getTabThreeControl(TabFolder tabFolder) {
    // Create some labels and text fields
    Composite composite = new Composite(tabFolder, SWT.NONE);
    composite.setLayout(new RowLayout());
    new Label(composite, SWT.LEFT).setText("Label One:");
    new Text(composite, SWT.BORDER);
    new Label(composite, SWT.RIGHT).setText("Label Two:");
    new Text(composite, SWT.BORDER);
    return composite;
  }
  /**
   * The entry point for the application
   * 
   * @param args the command line arguments
   */
  public static void main(String[] args) {
    new TabComplex().run();
  }
}