La touche d'accélération d'élément de menu fonctionne uniquement après l'affichage de l'élément de menu

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

  •  04-07-2019
  •  | 
  •  

Question

Je développe une application SWT / JFace à l'aide des bibliothèques d'Eclipse 3.4.1. Je rencontre le problème suivant sous Windows (Vista 32 bits) et Ubuntu 8.10 32 bits:

Je crée une barre de menus dans la méthode createMenuManager de JFace ApplicationWindow. J'ajoute des MenuManagers pour le fichier, l'édition et l'aide.

J'ajoute ensuite un ExitAction au fichier MenuManager comme suit:

filemenu.add(new ExitAction(this));

ExitAction est défini comme suit:

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');    
  }
}

Maintenant, lorsque mon application démarre, je souhaite pouvoir appuyer sur "CTRL + Q". quitter l'application. Cela ne fonctionne cependant pas. APRÈS avoir cliqué sur " Fichier " Dans la barre de menus, puis cliquez sur "CTRL + Q". l'application va quitter.

J'ai essayé cela avec différents accélérateurs: même comportement.

Cela fonctionne cependant si je crée un "MenuItem". au lieu d'un " Action " contribuer à la barre de menus.

Est-ce un bogue SWT ou est-ce que je manque quelque chose?

Torsten.

Était-ce utile?

La solution

Mise à jour: Il existe un bogue en double qui contient également une solution de contournement. L'URL du bug est: https://bugs.eclipse.org/bugs/show_bug .cgi? id = 243758

En gros, la solution consiste à appeler create () sur le ApplicationWindow , puis getMenuBarManager (). updateAll (true); , ce qui forcera tous les éléments de menu à initialiser.

Bien sûr, vous devez appeler les méthodes ci-dessus après avoir créé les éléments de menu.

Autres conseils

AFAIK setAccelerator (.) ne fait rien d'autre que d'ajouter le texte approprié à votre MenuItem . Vous devez vous inscrire à un événement KeyUp et y réagir.

Vous pouvez utiliser Display.addFilter (SWT.KeyUp, myListener) pour enregistrer votre écouteur indépendamment de vos widgets.

Il s’avère qu’il s’agit d’un bogue dans Eclipse 3.4. J'ai soumis un rapport de bogue: https://bugs.eclipse.org/bugs /show_bug.cgi?id=253078

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top