ToolBarComplex.java Source code

Java tutorial

Introduction

Here is the source code for ToolBarComplex.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.*;

/**
 * This class creates a complex toolbar. It has two regular push buttons, two
 * "toggle" push buttons, two "radio" push buttons, and two dropdowns.
 */
public class ToolBarComplex {
    private static final String IMAGE_PATH = "images" + System.getProperty("file.separator");

    // Images to use on our tool items
    private Image circle, grayCircle;
    private Image square, graySquare;
    private Image star, grayStar;
    private Image triangle, grayTriangle;

    // Labels to display tool item statuses
    private Label checkOneStatus;
    private Label checkTwoStatus;
    private Label radioStatus;
    private Label dropdownOneStatus;
    private Label dropdownTwoStatus;

    /**
     * Runs the application
     */
    public void run() {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setText("Toolbar with Images");
        createImages(shell);
        createContents(shell);
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
        disposeImages();
        display.dispose();
    }

    /**
     * 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"));
            grayCircle = new Image(shell.getDisplay(), new FileInputStream(IMAGE_PATH + "grayCircle.gif"));
            square = new Image(shell.getDisplay(), new FileInputStream(IMAGE_PATH + "square.gif"));
            graySquare = new Image(shell.getDisplay(), new FileInputStream(IMAGE_PATH + "graySquare.gif"));
            star = new Image(shell.getDisplay(), new FileInputStream(IMAGE_PATH + "star.gif"));
            grayStar = new Image(shell.getDisplay(), new FileInputStream(IMAGE_PATH + "grayStar.gif"));
            triangle = new Image(shell.getDisplay(), new FileInputStream(IMAGE_PATH + "triangle.gif"));
            grayTriangle = new Image(shell.getDisplay(), new FileInputStream(IMAGE_PATH + "grayTriangle.gif"));
        } catch (IOException e) {
            // Images not found; handle gracefully
        }
    }

    /**
     * Disposes the images
     */
    private void disposeImages() {
        if (circle != null)
            circle.dispose();
        if (grayCircle != null)
            grayCircle.dispose();
        if (square != null)
            square.dispose();
        if (graySquare != null)
            graySquare.dispose();
        if (star != null)
            star.dispose();
        if (grayStar != null)
            grayStar.dispose();
        if (triangle != null)
            triangle.dispose();
        if (grayTriangle != null)
            grayTriangle.dispose();
    }

    /**
     * Creates the window contents
     * 
     * @param shell the parent shell
     */
    private void createContents(Shell shell) {
        shell.setLayout(new RowLayout(SWT.VERTICAL));
        createToolbar(shell);

        // Create the labels to display the statuses of
        // the "check" and "radio" buttons
        Composite composite = new Composite(shell, SWT.NONE);
        composite.setLayout(new GridLayout(2, true));

        new Label(composite, SWT.RIGHT).setText("Check One Status:");
        checkOneStatus = new Label(composite, SWT.LEFT);
        checkOneStatus.setText("Off");

        new Label(composite, SWT.RIGHT).setText("Check Two Status:");
        checkTwoStatus = new Label(composite, SWT.LEFT);
        checkTwoStatus.setText("Off");

        new Label(composite, SWT.RIGHT).setText("Radio Status:");
        radioStatus = new Label(composite, SWT.LEFT);
        radioStatus.setText("None");
    }

    /**
     * Creates the toolbar
     * 
     * @param shell the parent shell
     */
    private void createToolbar(final Shell shell) {
        ToolBar toolBar = new ToolBar(shell, SWT.HORIZONTAL);

        // Create push buttons
        ToolItem item = createToolItem(toolBar, SWT.PUSH, "Button One", circle, null, "This is button one");
        item.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent event) {
                showMessage(shell, "Button One Pressed");
            }
        });

        item = createToolItem(toolBar, SWT.PUSH, "Button Two", square, null, "This is button two");
        item.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent event) {
                showMessage(shell, "Button Two Pressed");
            }
        });

        ToolItem myItem = new ToolItem(toolBar, SWT.SEPARATOR);

        // Create "check" buttons
        item = createToolItem(toolBar, SWT.CHECK, "Check One", grayStar, star, "This is check one");
        item.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent event) {
                ToolItem item = (ToolItem) event.widget;
                checkOneStatus.setText(item.getSelection() ? "On" : "Off");
            }
        });

        item = createToolItem(toolBar, SWT.CHECK, "Check Two", grayTriangle, triangle, "This is check two");
        item.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent event) {
                ToolItem item = (ToolItem) event.widget;
                checkTwoStatus.setText(item.getSelection() ? "On" : "Off");
            }
        });

        new ToolItem(toolBar, SWT.SEPARATOR);

        // Create "radio" buttons
        item = createToolItem(toolBar, SWT.RADIO, "Radio One", grayCircle, circle, "This is radio one");
        item.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent event) {
                radioStatus.setText("One");
            }
        });

        item = createToolItem(toolBar, SWT.RADIO, "Radio Two", graySquare, square, "This is radio two");
        item.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent event) {
                radioStatus.setText("Two");
            }
        });

        new ToolItem(toolBar, SWT.SEPARATOR);

        // Create dropdowns
        item = createToolItem(toolBar, SWT.DROP_DOWN, "Dropdown One", star, null, "This is dropdown one");
        DropdownSelectionListener listenerOne = new DropdownSelectionListener(item);
        listenerOne.add("Option One for One");
        listenerOne.add("Option Two for One");
        listenerOne.add("Option Three for One");
        item.addSelectionListener(listenerOne);

        item = createToolItem(toolBar, SWT.DROP_DOWN, "Dropdown Two", triangle, null, "This is dropdown two");
        DropdownSelectionListener listenerTwo = new DropdownSelectionListener(item);
        listenerTwo.add("Option One for Two");
        listenerTwo.add("Option Two for Two");
        listenerTwo.add("Option Three for Two");
        item.addSelectionListener(listenerTwo);
    }

    /**
     * Helper function to create tool item
     * 
     * @param parent the parent toolbar
     * @param type the type of tool item to create
     * @param text the text to display on the tool item
     * @param image the image to display on the tool item
     * @param hotImage the hot image to display on the tool item
     * @param toolTipText the tool tip text for the tool item
     * @return ToolItem
     */
    private ToolItem createToolItem(ToolBar parent, int type, String text, Image image, Image hotImage,
            String toolTipText) {
        ToolItem item = new ToolItem(parent, type);
        item.setText(text);
        item.setImage(image);
        item.setHotImage(hotImage);
        item.setToolTipText(toolTipText);
        return item;
    }

    /**
     * Helper method to display a message box. We use it to display a message when
     * a "push" button or "dropdown" button is pushed.
     * 
     * @param shell the parent shell for the message box
     * @param message the message to display
     */
    public static void showMessage(Shell shell, String message) {
        MessageBox msgBox = new MessageBox(shell, SWT.OK);
        msgBox.setMessage(message);
        msgBox.open();
    }

    /**
     * The application entry point
     * 
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        new ToolBarComplex().run();
    }
}

/**
 * This class provides the "drop down" functionality for our dropdown tool items.
 */
class DropdownSelectionListener extends SelectionAdapter {
    private ToolItem dropdown;
    private Menu menu;

    /**
     * Constructs a DropdownSelectionListener
     * 
     * @param dropdown the dropdown this listener belongs to
     */
    public DropdownSelectionListener(ToolItem dropdown) {
        this.dropdown = dropdown;
        menu = new Menu(dropdown.getParent().getShell());
    }

    /**
     * Adds an item to the dropdown list
     * 
     * @param item the item to add
     */
    public void add(String item) {
        MenuItem menuItem = new MenuItem(menu, SWT.NONE);
        menuItem.setText(item);
        menuItem.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent event) {
                MenuItem selected = (MenuItem) event.widget;
                dropdown.setText(selected.getText());
            }
        });
    }

    /**
     * Called when either the button itself or the dropdown arrow is clicked
     * 
     * @param event the event that trigged this call
     */
    public void widgetSelected(SelectionEvent event) {
        // If they clicked the arrow, we show the list
        if (event.detail == SWT.ARROW) {
            // Determine where to put the dropdown list
            ToolItem item = (ToolItem) event.widget;
            Rectangle rect = item.getBounds();
            Point pt = item.getParent().toDisplay(new Point(rect.x, rect.y));
            menu.setLocation(pt.x, pt.y + rect.height);
            menu.setVisible(true);
        } else {
            // They pushed the button; take appropriate action
            ToolBarComplex.showMessage(dropdown.getParent().getShell(), dropdown.getText() + " Pressed");
        }
    }
}