2014-02-23 27 views
2

我想給我的應用程序的「首選項..」MenuItem(在Mac默認系統菜單),但由於某種原因點擊不工作,我看不到什麼我做錯了。這是我如何得到偏好menuitem:使用首選項MenuItem SWT

protected MenuItem getPreferencesMenuItem() { 
    Menu guiMenu = Display.getDefault().getSystemMenu(); 
    MenuItem preferencesMenuItem = null; 

    if (guiMenu != null) { 
     for (int i = 0; i < guiMenu.getItemCount(); i++) { 
      MenuItem currentMenuItem = guiMenu.getItem(i); 
      if (currentMenuItem.getText().contains("Preferences")) { 
       preferencesMenuItem = currentMenuItem; 
       break; 
      } // end if 
     } // end for 
    } // end if 

    return preferencesMenuItem; 
} 

這就是我如何添加偵聽器。有什麼我失蹤?

MenuItem preferencesMenuItem = this.getPreferencesMenuItem(); 
if (preferencesMenuItem != null) { 
    System.out.println(preferencesMenuItem.getText()); 
    preferencesMenuItem.addSelectionListener(new SelectionAdapter() { 
     public void selectedWidget(SelectionEvent event) { 
      System.out.println("Preferences selected."); 
      PreferencesDialog preferencesDialog = new PreferencesDialog(shell_, processPanel_.getImageManager()); 
      preferencesDialog.open(); 
      }}); 
} 
+0

你必須對接口部分Mac代碼要做到這一點,請參閱[這個博客(http://eclipsesource.com/blogs/2012/07/19/configuring-the-os-x-application- menu-for-swt-apps /)和[this question](https://stackoverflow.com/questions/6665933/swt-how-to-handle-application-events-correctly-on-os-x) –

回答

0

我相信你想打開首選項對話框。

這裏是示例代碼打開首選項對話框與選定的首選項頁面ID。你應該看看如何使用ParameterizedCommand。希望這可以幫助。

public static boolean openPreferencePage(String preferencePageId) { 

    if (StringUtils.isEmpty(preferencePageId)) 
     return false; 
    IServiceLocator serviceLocator = PlatformUI.getWorkbench(); 

    ICommandService commandService = (ICommandService) serviceLocator.getService(ICommandService.class); 

    IHandlerService handlerService = (IHandlerService) serviceLocator.getService(IHandlerService.class); 

    Command command = commandService.getCommand(IWorkbenchCommandConstants.WINDOW_PREFERENCES); 
    IParameter parmDef = null; 
    try { 
     parmDef = command.getParameter(IWorkbenchCommandConstants.WINDOW_PREFERENCES_PARM_PAGEID); 
    } catch (NotDefinedException e) { 
     Logger.log(e); 
     return false; 
    } 
    if (parmDef != null) { 
     Parameterization[] params = new Parameterization[] { new Parameterization(parmDef, preferencePageId) }; 

     ParameterizedCommand paramCommand = new ParameterizedCommand(command, params); 
     try { 
     handlerService.executeCommand(paramCommand, null); 
     return true; 
     } catch (Exception e) { 
     Logger.log(e); 
     return false; 
     } 
    } 
    return false; 

    }