2012-08-05 43 views
0

我有托盤圖標,我附加了一個菜單,當用戶右鍵點擊它時,它彈出。如何禁用SWT中的系統托盤圖標的上下文菜單?

在我的應用程序中,我希望禁止顯示內容菜單,並在稍後重新啓用它。我如何做到這一點?我一直沒能找到一個例子,並且mnuPopup.setEnabled(false)似乎沒有工作。

下面是創建托盤圖標並附加菜單的代碼片段。

Tray trySysTray = display.getSystemTray(); 
Menu mnuPopup = new Menu(shell, SWT.POP_UP); 
TrayItem itmTrayItem = new TrayItem(trySysTray, SWT.NONE); 

itmTrayItem.addListener(SWT.MenuDetect, new Listener() { 
    public void handleEvent(Event event) { 
     mnuPopup.setVisible(true); 
    } 
}); 

回答

1

下應該做的工作:

public class MiniExample { 
    // the boolean to decide if menu is shown 
    private static boolean showMenu = true; 

    public static void main(String[] args) { 
     Display display = Display.getDefault(); 
     final Shell shell = new Shell(display); 
     shell.setLayout(new FillLayout()); 

     Tray tray = display.getSystemTray(); 
     final TrayItem item = new TrayItem(tray, SWT.NONE); 

     // INPUT A REAL IMAGE HERE! 
     item.setImage(SOME_IMAGE); 

     item.addMenuDetectListener(new MenuDetectListener() { 

      @Override 
      public void menuDetected(MenuDetectEvent event) { 
      // if menu shall not be shown, tell it to the event 
       if(!showMenu) 
       { 
        event.doit = false; 
        return; 
       } 

      // else create the menu 
       Menu menu = new Menu(shell, SWT.POP_UP); 
       MenuItem menuitem = new MenuItem(menu, SWT.PUSH); 
       menuitem.setText("Do Something"); 
       menuitem.addListener(SWT.Selection, new Listener() { 
        public void handleEvent(Event e) { 
         System.out.println("Do something!"); 
        } 
       }); 

       menu.setVisible(true); 
       while (!menu.isDisposed() && menu.isVisible()) { 
        if (!shell.getDisplay().readAndDispatch()) 
         shell.getDisplay().sleep(); 
       } 

      // remember to dispose it !! 
       menu.dispose(); 
      } 
     }); 

     Button button = new Button(shell, SWT.PUSH); 
     button.setText("Button"); 
     button.addSelectionListener(new SelectionListener() { 

      @Override 
      public void widgetSelected(SelectionEvent arg0) { 
       // button decides if menu is shown or not 
       showMenu = !showMenu; 
      } 

      @Override 
      public void widgetDefaultSelected(SelectionEvent arg0) { 

      } 
     }); 

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