GXT:如何拦截ctrl-f4

时间:2011-08-23 19:46:08

标签: gwt keyboard-shortcuts gxt

我想截取 Ctrl + F4 以关闭TabPanel的标签,而不是我的应用程序正在运行的浏览器标签。以下代码可用如果我先在标签面板中单击:

    Viewport v = new Viewport();
    v.setLayout(new FitLayout());

    v.add(panel);
    v.addListener(Events.KeyDown, new Listener<BaseEvent>() {
        public void handleEvent(BaseEvent be) {
            KeyEvent ce = (KeyEvent)be;
            if (ce.isControlKey()) {
                if (ce.getKeyCode() == 115) {
                    System.out.println(ce.getKeyCode() + " Ctrl-f4");
                    ce.preventDefault();
                    ce.stopEvent();
                }
            }
        };
    });

有趣的是,如果焦点位于TabPanel之外(显然位于Viewport内),则不会触发事件。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您可以使用ClosingHandler拦截窗口关闭事件并提示用户进行确认。但是,您不能完全阻止窗口/选项卡关闭 - 浏览器将不允许它。您将不得不选择其他键盘快捷方式。

选择快捷方式后,使用NativePreviewHandler进行检测:

Event.addNativePreviewHandler(new NativePreviewHandler() {
  @Override
  public void onPreviewNativeEvent(NativePreviewEvent event) {
    if (event.getTypeInt() == Event.ONKEYDOWN) {
      NativeEvent ne = event.getNativeEvent();

      if (ne.getKeyCode() == 't' && ne.getCtrlKey()) {
        // ...
      }
    }
  }
});

答案 1 :(得分:0)

ctrl-f4是特定于Windows的,因此您不应该依赖它。

使用Window.ClosingHandler

来捕捉用户关闭窗口/标签
     Window.addWindowClosingHandler(new Window.ClosingHandler() {
        @Override
        public void onWindowClosing(ClosingEvent closingEvent) {
            closingEvent.setMessage("Closing? Really?")
        }
    });

这将显示带有您的消息和确认按钮的浏览器对话框。