TabComplex.java Source code

Java tutorial

Introduction

Here is the source code for TabComplex.java

Source

//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();
    }
}