【问题标题】:MacOS Eclipse RCP MenuItem Selection event invalidationMacOS Eclipse RCP MenuItem 选择事件失效
【发布时间】:2022-01-10 03:38:38
【问题描述】:

MacOS 10.15.5 Eclipse RCP 2020-09

问题:MenuItem Selection 事件失效

代码:

@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 无法执行,事件未触发

窗口操作系统没问题

【问题讨论】:

  • 你为什么不使用MenuItem#addSelectionListener()
  • .....这是我的偏好...有关系吗?
  • 没有用MenuItem#addSelectionListener()...我试过了
  • @nitind addSelectionListener 最终只是在内部使用 SWT.Selection 样式列表。

标签: java eclipse


【解决方案1】:

您不能直接在菜单栏上使用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");

(改编自this SWT Snippet并在macOS 12.0.1上测试)

注意:如果您只想在外壳顶部使用按钮,请使用 ToolBar

【讨论】:

  • 想想你,我知道该怎么做:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 2014-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多