item de menu accel obras fundamentais somente após item de menu foi mostrado

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

  •  04-07-2019
  •  | 
  •  

Pergunta

Estou desenvolvendo um aplicativo SWT / JFace usando as bibliotecas do Eclipse 3.4.1. I encontrar o seguinte problema no Windows (Vista 32 bits) e Ubuntu 8.10 32 bits:

I criar uma barra de menu no método createMenuManager do JFace ApplicationWindow. Acrescento MenuManagers para o arquivo, editar e ajuda.

Em seguida, adicione um ExitAction para o arquivo MenuManager assim:

filemenu.add(new ExitAction(this));

O ExitAction é definido da seguinte maneira:

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

Agora quando meu aplicativo é iniciado Eu quero ser capaz de pressionar "CTRL + Q" para sair da aplicação. Este, porém, não funciona. Só depois que eu clicar em "Arquivo" na barra de menu e depois clicar em "CTRL + Q" o aplicativo irá parar.

Eu tentei isso com diferentes mesmo comportamento accelerators-.

Ele faz o trabalho no entanto, se eu criar um "MenuItem" em vez de uma "ação" para contribuir para a barra de menu.

É este bug um SWT ou eu perdi alguma coisa?

Torsten.

Foi útil?

Solução

Update: Há um bug duplicado da mina, que também contém uma solução alternativa. O url bug é: https://bugs.eclipse.org/bugs/show_bug .cgi? id = 243758

Basicamente, a solução é chamar create() na ApplicationWindow e depois getMenuBarManager().updateAll(true); que forçará todos os itens de menu para obter inicializado.

É claro que você tem que chamar os métodos acima depois de criar os itens do menu.

Outras dicas

AFAIK setAccelerator(.) não faz nada mais do que adicionar o texto apropriado para o seu MenuItem. Você é responsável para se registrar para um evento KeyUp e reagir a ele.

Você pode usar Display.addFilter(SWT.KeyUp, myListener) para registrar o seu Listener independentemente de seus widgets.

Acontece que este é um bug no Eclipse 3.4. I apresentaram um relatório de bug: https://bugs.eclipse.org/bugs /show_bug.cgi?id=253078

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top