PopupMenuComposite.java Source code

Java tutorial

Introduction

Here is the source code for PopupMenuComposite.java

Source

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;

public class PopupMenuComposite {

    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);

        shell.setLayout(new GridLayout(2, true));

        final Composite composite1 = new Composite(shell, SWT.BORDER);
        composite1.setBackground(display.getSystemColor(SWT.COLOR_BLACK));

        final Composite composite2 = new Composite(shell, SWT.BORDER);
        composite2.setBackground(display.getSystemColor(SWT.COLOR_BLUE));

        Menu menu = new Menu(composite1);
        MenuItem menuItem = new MenuItem(menu, SWT.PUSH);
        menuItem.setText("Popup menu");

        menuItem.addDisposeListener(new DisposeListener() {
            public void widgetDisposed(DisposeEvent e) {
                System.out.println("Menu item is disposed.");
            }
        });

        menuItem.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                System.out.println("Dispsoing ...");
                composite2.setMenu(null);
                composite2.dispose();
            }
        });

        composite1.setMenu(menu);
        composite2.setMenu(menu);

        shell.pack();
        shell.open();

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                // If no more entries in event queue
                display.sleep();
            }
        }

        display.dispose();
    }
}