Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gwt GXT:如何拦截ctrl-f4_Gwt_Keyboard Shortcuts_Gxt - Fatal编程技术网

Gwt GXT:如何拦截ctrl-f4

Gwt GXT:如何拦截ctrl-f4,gwt,keyboard-shortcuts,gxt,Gwt,Keyboard Shortcuts,Gxt,我想截取Ctrl+F4以关闭选项卡面板的选项卡,而不是运行应用程序的浏览器选项卡。如果首先单击选项卡面板内部,则以下代码有效: Viewport v = new Viewport(); v.setLayout(new FitLayout()); v.add(panel); v.addListener(Events.KeyDown, new Listener<BaseEvent>() { public void handleEvent(

我想截取Ctrl+F4以关闭选项卡面板的选项卡,而不是运行应用程序的浏览器选项卡。如果首先单击选项卡面板内部,则以下代码有效:

    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();
                }
            }
        };
    });
Viewport v=新视口();
v、 setLayout(新的FitLayout());
v、 添加(面板);
v、 addListener(Events.KeyDown,newlistener()){
公共无效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之外(显然位于视口内部),则不会触发事件


有什么想法吗?

您可以使用
ClosingHandler
截获窗口关闭事件并提示用户确认。但是,您不能完全阻止窗口/选项卡关闭-浏览器将不允许关闭。你必须选择一个不同的键盘快捷键

选择快捷方式后,请使用以下方法进行检测:

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()) {
        // ...
      }
    }
  }
});

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

要捕获用户关闭窗口/选项卡,请使用
窗口。ClosingHandler

     Window.addWindowClosingHandler(new Window.ClosingHandler() {
        @Override
        public void onWindowClosing(ClosingEvent closingEvent) {
            closingEvent.setMessage("Closing? Really?")
        }
    });

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

捕获事件现在起作用,停止则不起作用。我尝试了ne.stopPropagation()、ne.preventDefault()和event.cancel()。但是没有一个有效,也就是说,该选项卡被浏览器关闭。你完全正确:我还需要捕获其他组合。但我想在捕捉到ctrl+f4(或ctrl+q或其他)时关闭TabPanel中的面板。因此,我不能使用关闭处理程序。