Клавиша ускорения пункта меню работает только после того, как пункт меню был показан - PullRequest
0 голосов
/ 27 октября 2008

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

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

Затем я добавляю 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 или я что-то пропустил?

Торстен.

Ответы [ 3 ]

1 голос
/ 05 ноября 2008

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

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

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

0 голосов
/ 05 ноября 2008

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

0 голосов
/ 29 октября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...