Клавиша ускорения пункта меню срабатывает только после отображения пункта меню

StackOverflow https://stackoverflow.com/questions/239744

  •  04-07-2019
  •  | 
  •  

Вопрос

Я разрабатываю приложение SWT / JFace, используя библиотеки из Eclipse 3.4.1.Я сталкиваюсь со следующей проблемой в Windows (Vista 32bit) и Ubuntu 8.10 32bit:

Я создаю строку меню в методе createMenuManager JFace ApplicationWindow.Я добавляю MenuManagers для файлов, редактирования и справки.

Затем я добавляю ExitAction в файл MenuManager следующим образом:

filemenu.add(new ExitAction(this));

Действие ExitAction определяется таким образом:

public class ExitAction extends Action {
  final ApplicationWindow window;

  public ExitAction(ApplicationWindow w) {

    this.window = w;
    setText("E&xit");
    setToolTipText("Exit the application");
    setAccelerator(SWT.MOD1 + 'Q');    
  }
}

Теперь, когда мое приложение запускается, я хочу иметь возможность нажать "CTRL + Q", чтобы выйти из приложения.Однако это не работает.Только ПОСЛЕ того, как я нажму на "Файл" в строке меню, а затем нажму "CTRL + Q", приложение завершит работу.

Я пробовал это с разными ускорителями - то же поведение.

Однако это сработает, если я создам "MenuItem" вместо "Action" для внесения вклада в строку меню.

Это ошибка SWT или я что-то пропустил?

Torsten.

Это было полезно?

Решение

Обновить:Существует моя дублирующаяся ошибка, которая также содержит обходной путь.URL-адрес ошибки является: https://bugs.eclipse.org/bugs/show_bug.cgi?id=243758

В основном обходной путь заключается в вызове create() на ApplicationWindow и тогда getMenuBarManager().updateAll(true); который заставит все пункты меню инициализироваться.

Конечно, вы должны вызвать вышеуказанные методы после того, как вы создали пункты меню.

Другие советы

АФАИК setAccelerator(.) не делает ничего иного, кроме добавления соответствующего текста в ваш MenuItem.Вы несете ответственность за регистрацию для KeyUp событие и реагировать на него.

Вы можете использовать Display.addFilter(SWT.KeyUp, myListener) чтобы зарегистрировать свой Listener независимо от ваших виджетов.

Оказывается, это ошибка в Eclipse 3.4.Я отправил отчет об ошибке: https://bugs.eclipse.org/bugs/show_bug.cgi?id=253078

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top