La touche d'accélération d'élément de menu fonctionne uniquement après l'affichage de l'élément de menu
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.
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