菜单加速器SWT.ALT + SWT.ARROW未被触发

时间:2015-09-21 09:00:49

标签: java menu swt accelerator

我正在使用SWT 4.4.2(win32)为简单的mp3播放器应用程序构建图形用户界面。
在SWT树中,我显示了一些要播放的文件夹和文件 现在我想通过单击菜单项并按 ALT + ARROW_UP ALT + ARROW_DOWN 来更改播放文件的音量。

所以我有这些组件:

tree = new Tree(shell, SWT.BORDER | SWT.FULL_SELECTION | SWT.SINGLE | SWT.V_SCROLL);
tree.setLinesVisible(true);
tree.setLocation(10, 10);
tree.setSize(240, 440);

audioLouderMenu = new MenuItem(audioVolumeMenu, SWT.PUSH);
audioLouderMenu.setAccelerator(SWT.ALT | SWT.ARROW_UP);
audioLouderMenu.setText("Louder");
audioLouderMenu.addListener(SWT.Selection, audioVolumeMenuHandler);

audioQuieterMenu = new MenuItem(audioVolumeMenu, SWT.PUSH);
audioQuieterMenu.setAccelerator(SWT.ALT | SWT.ARROW_DOWN);
audioQuieterMenu.setText("Quieter");
audioQuieterMenu.addListener(SWT.Selection, audioVolumeMenuHandler);

问题是如果树视图具有焦点并按 ALT + ARROW_DOWN ,则会选择树中的另一个条目,而不会触发菜单项的快捷方式。

这是SWT的错误吗?我该如何解决这个问题? 我知道我可以定义另一个快捷方式,但我认为也应该可以使用 ALT + ARROW_UP / DOWN ......

1 个答案:

答案 0 :(得分:0)

这不是错误,而是树的(平台相关的)键盘导航功能。

我建议为音频音量选择不同的快捷方式,以免混淆用户。如果您仍想使用 ALT + ARROW_DOWN ,您可以尝试阻止树使用此组合键,从而使菜单有机会使用它:

tree.addListener( SWT.KeyDown, new Listener() {
  @Override
  public void handleEvent( Event event ) {
    if( event.keyCode == SWT.ARROW_DOWN && ( event.stateMask & SWT.MOD3 ) != 0 ) {
      event.doit = false;
    }
  }
} );