ToolItemDropDownMenu.java Source code

Java tutorial

Introduction

Here is the source code for ToolItemDropDownMenu.java

Source

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;

public class ToolItemDropDownMenu {

    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);
        ToolBar toolBar = new ToolBar(shell, SWT.BORDER | SWT.VERTICAL);

        ToolItem item = new ToolItem(toolBar, SWT.DROP_DOWN);
        item.setText("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);

        toolBar.pack();

        shell.pack();
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }
}

class DropdownSelectionListener extends SelectionAdapter {
    private ToolItem dropdown;

    private Menu menu;

    public DropdownSelectionListener(ToolItem dropdown) {
        this.dropdown = dropdown;
        menu = new Menu(dropdown.getParent().getShell());
    }

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

    public void widgetSelected(SelectionEvent event) {
        if (event.detail == SWT.ARROW) {
            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 {
            System.out.println(dropdown.getText() + " Pressed");
        }
    }
}