Аннулирование события выбора элемента меню macOS Eclipse Eclipse в macOS

#java #eclipse

#java #eclipse

Вопрос:

macOS 10.15.5 Eclipse RCP 2020-09

Проблема: аннулирование события выбора элемента меню

Код :

 @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 не удается выполнить, событие не запущено

Windows OS в порядке

Комментарии:

1. Почему вы не использовали MenuItem#addSelectionListener() ?

2. …..Это мое предпочтение… Имеет ли это значение?

3. Бесполезно использовать элемент меню#addSelectionListener() … Я пробовал

4. @nitind addSelectionListener просто завершает использование SWT. Список стилей выбора отображается внутри.

Ответ №1:

У вас не может быть SWT.PUSH элементов меню стиля непосредственно в строке меню (по крайней мере, не в macOS). Вам необходимо создать SWT.CASCADE пункты меню с элементами push в качестве дочерних элементов.

 Menu bar = new Menu(shell, SWT.BAR);
shell.setMenuBar(bar);

MenuItem fileItem = new MenuItem(bar, SWT.CASCADE);
fileItem.setText("amp;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 и протестировано на macOS 12.0.1)

Примечание: Если вы просто хотите нажимать кнопки в верхней части оболочки, используйте a ToolBar .

Комментарии:

1. думаешь, я знаю, что делать 🙂