2012-08-05 1 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(); 
     } 
    } 
}