我想截取 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内),则不会触发事件。
有什么想法吗?
答案 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?")
}
});
这将显示带有您的消息和确认按钮的浏览器对话框。