La tecla de aceleración del elemento del menú funciona solo después de que se haya mostrado el elemento del menú

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

  •  04-07-2019
  •  | 
  •  

Pregunta

Estoy desarrollando una aplicación SWT / JFace usando las bibliotecas de Eclipse 3.4.1. Encuentro el siguiente problema en Windows (Vista 32bit) y Ubuntu 8.10 32bit:

Creo una barra de menú en el método createMenuManager de JFace ApplicationWindow. Añado MenuManagers para archivo, edición y ayuda.

Luego agrego una ExitAction al archivo MenuManager como tal:

filemenu.add(new ExitAction(this));

La ExitAction se define de esta manera:

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

Ahora, cuando se inicie mi aplicación, quiero poder presionar " CTRL + Q " para salir de la aplicación. Sin embargo, esto no funciona. Solo DESPUÉS de hacer clic en " Archivo " en la barra de menú y ENTONCES haciendo clic en " CTRL + Q " la aplicación se cerrará.

He intentado esto con diferentes aceleradores: el mismo comportamiento.

Sin embargo, funciona si creo un " MenuItem " en lugar de una " Acción " para contribuir a la barra de menú.

¿Se trata de un error de SWT o echo de menos algo?

Torsten.

¿Fue útil?

Solución

Actualización: hay un error duplicado mío que también contiene una solución. La url del error es: https://bugs.eclipse.org/bugs/show_bug .cgi? id = 243758

Básicamente, la solución es llamar a create () en la ApplicationWindow y luego getMenuBarManager (). updateAll (true); que forzará Todos los elementos del menú se inicializan.

Por supuesto, debe llamar a los métodos anteriores después de crear los elementos del menú.

Otros consejos

AFAIK setAccelerator (.) no hace nada más que agregar el texto apropiado a su MenuItem . Usted es responsable de registrarse para un evento KeyUp y reaccionar ante él.

Puede usar Display.addFilter (SWT.KeyUp, myListener) para registrar su Listener independientemente de sus widgets.

Resulta que este es un error en Eclipse 3.4. He enviado un informe de error: https://bugs.eclipse.org/bugs /show_bug.cgi?id=253078

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top