MacOS 10.15.5 Eclipse RCP 2020-09
問題:MenuItem 選擇事件失效
代碼 :
@Override
protected void configureShell(Shell newShell) {
newShell.setImage( Images.getImageDescriptor(ImageConstants.IMG_LoL).createImage() ) ;
newShell.setText( LoLPlugin.getPluginName() );
newShell.setBackgroundMode( SWT.INHERIT_DEFAULT ) ;
newShell.setLayout( new FillLayout() ) ;
newShell.setMenuBar( createMenuBar(newShell) ) ;
newShell.setSize( getInitialSize() ) ;
newShell.setLocation( getInitialLocation( newShell ) ) ;
newShell.addDisposeListener( e -> { newShell.getImage().dispose() ; saveLocation() ; } ) ;
newShell.setData( window ) ;
}
private Menu createMenuBar(Shell shell) {
Menu mainMenu = new Menu( shell , SWT.BAR ) ;
MenuItem bundleItem = new MenuItem( mainMenu , SWT.PUSH ) ;
bundleItem.setText( Message.BundleBook_Name ) ;
bundleItem.addListener(SWT.Selection, e -> showBook( BundleBook.ID ) );
MenuItem resourceItem = new MenuItem( mainMenu , SWT.PUSH ) ;
resourceItem.setText( Message.ResourceBook_Name ) ;
resourceItem.addListener(SWT.Selection, e -> showBook( ResourceBook.ID ) );
MenuItem guideItem = new MenuItem( mainMenu , SWT.PUSH ) ;
guideItem.setText( Message.GuideBook_Name ) ;
guideItem.addListener( SWT.Selection , e -> showBook( GuideBook.ID ) ) ;
return mainMenu ;
}
private void showBook( String id ) {
System.out.println( "MaC OS Cannot execute - Window OS Is OK" ) ;
bookcase.showBook( id ) ;
}
結果:MacOS 無法執行,事件未觸發
Window 作業系統正常
uj5u.com熱心網友回復:
您不能SWT.PUSH直接在選單欄上設定樣式選單項(至少在 macOS 上不是)。您需要SWT.CASCADE使用推送項作為子項創建選單項。
Menu bar = new Menu(shell, SWT.BAR);
shell.setMenuBar(bar);
MenuItem fileItem = new MenuItem(bar, SWT.CASCADE);
fileItem.setText("&File");
Menu fileSubMenu = new Menu(shell, SWT.DROP_DOWN);
fileItem.setMenu(fileSubMenu);
MenuItem item = new MenuItem(fileSubMenu, SWT.PUSH);
item.addListener(SWT.Selection, e -> System.out.println("Select All"));
item.setText("Select");
(改編自此 SWT Snippet并在 macOS 12.0.1 上測驗)
注意:如果您只想在外殼頂部按下按鈕,請使用ToolBar.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/377196.html
