Il tasto accel della voce di menu funziona solo dopo che è stata mostrata la voce di menu

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

  •  04-07-2019
  •  | 
  •  

Domanda

Sto sviluppando un'applicazione SWT / JFace usando le librerie di Eclipse 3.4.1. Riscontro il seguente problema su Windows (Vista 32 bit) e Ubuntu 8.10 32 bit:

Creo una barra dei menu nel metodo createMenuManager della finestra dell'applicazione JFace. Aggiungo MenuManager per file, modifica e aiuto.

Aggiungo quindi ExitAction al file MenuManager in questo modo:

filemenu.add(new ExitAction(this));

ExitAction è definito in questo modo:

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

Ora quando la mia applicazione si avvia voglio poter premere " CTRL + Q " per chiudere l'applicazione. Questo tuttavia non funziona. Solo DOPO che faccio clic su " File " nella barra dei menu e POI facendo clic su & C; CTRL + Q " l'applicazione verrà chiusa.

L'ho provato con diversi acceleratori, stesso comportamento.

Funziona comunque se creo un " MenuItem " invece di un " Azione " per contribuire alla barra dei menu.

È un bug SWT o mi manca qualcosa?

Torsten.

È stato utile?

Soluzione

Aggiornamento: esiste un mio bug duplicato che contiene anche una soluzione alternativa. L'URL del bug è: https://bugs.eclipse.org/bugs/show_bug .cgi? id = 243758

Fondamentalmente la soluzione è chiamare create () su ApplicationWindow e quindi getMenuBarManager (). updateAll (true); che forzerà tutte le voci di menu da inizializzare.

Ovviamente devi chiamare i metodi sopra dopo aver creato le voci di menu.

Altri suggerimenti

AFAIK setAccelerator (.) non fa altro che aggiungere il testo appropriato al tuo MenuItem . Sei responsabile di registrarti per un evento KeyUp e reagire su di esso.

Puoi usare Display.addFilter (SWT.KeyUp, myListener) per registrare il tuo Listener indipendentemente dai tuoi widget.

Si scopre che si tratta di un bug in Eclipse 3.4. Ho inviato una segnalazione di bug: https://bugs.eclipse.org/bugs /show_bug.cgi?id=253078

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top