Mega Code Archive

 
Categories / Java Tutorial / SWT
 

PopupMenu is not disposed with the composite

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