#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. думаешь, я знаю, что делать 🙂