Я хочу создать плагин для трансляции приложения на основе Eclipse. Для запуска перевода GUI я использовал двойной щелчок для ярлыков и элементов управления, подобных этому. Однако для меню я не могу использовать двойной щелчок, так как меню закрывается при первом щелчке, но щелчок мышью + alt / control / что бы то ни было невозможно, поскольку меню не получает никаких событий. Та же проблема существует для ключевых событий любого типа.
Этот пример показывает проблему:
public static void main(String[] args) {
final Display display = new Display();
display.addFilter(SWT.KeyUp, e -> System.out.println(e.keyCode));
display.addFilter(SWT.MouseDoubleClick, e -> System.out.println("MouseDoubleClick"));
display.addFilter(SWT.MouseUp, e -> System.out.println("MouseUp"));
final Shell shell = new Shell(display);
shell.setText("Key Up Example");
shell.setSize(300, 200);
final Menu menuBar = new Menu(shell, SWT.BAR);
final MenuItem fileMenuHeader = new MenuItem(menuBar, SWT.CASCADE);
fileMenuHeader.setText("&File");
final Menu fileMenu = new Menu(shell, SWT.DROP_DOWN);
fileMenuHeader.setMenu(fileMenu);
final MenuItem fileSaveItem = new MenuItem(fileMenu, SWT.PUSH);
fileSaveItem.setText("&Save");
final MenuItem helpMenuHeader = new MenuItem(menuBar, SWT.CASCADE);
helpMenuHeader.setText("&Help");
final Menu helpMenu = new Menu(shell, SWT.DROP_DOWN);
helpMenuHeader.setMenu(helpMenu);
final MenuItem helpGetHelpItem = new MenuItem(helpMenu, SWT.PUSH);
helpGetHelpItem.setText("&Get Help");
shell.setMenuBar(menuBar);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
Вы можете нажать и ввести в окне, и консоль покажет события - но когда меню открыто, даже события пожара мемотики.
Я обнаружил Ошибка 281433 с той же проблемой, но она застряла в состоянии "NEW".
Примечание: Поскольку я слушаю глобальные события, просто добавить слушателей в меню не получится. Это также не работает, ни MenuItem
, ни Menu
не запускают никаких событий.
Есть ли способ прослушивания каких-либо глобальных событий при открытом меню?