我们正在创建一个窗口来添加附件。附件可以通过拖拽或使用Ctrl+V从剪贴板复制来添加。能够实现拖放,但无法在窗口或页面上订阅KeyEvent。
尝试了以下代码,但失败了。
onPageAttached & onPageDetached。
@Override
public void onPageDetached(Page page) {
super.onPageDetached(page);
try {
SessionManager.getSessionApplication().getKeylistener().removeEventListener(Events.ON_CTRL_KEY, this);
} catch (Exception e) {}
}
@Override
public void onPageAttached(Page newpage, Page oldpage) {
super.onPageAttached(newpage, oldpage);
if (newpage != null) {
SessionManager.getSessionApplication().getKeylistener().addEventListener(Events.ON_CTRL_KEY, this);
}
}
在实现EventListener的自定义Window类里面添加EventListener。
this.addEventListener(Events.ON_CTRL_KEY, this);
我在网上看到的所有代码示例都是用ZUL文件。但我需要使用java代码动态地实现这一点。
我能够订阅其他事件,如点击事件,关闭事件等。
你要配置一些东西来监听键。
1:目标如果你想在整个页面中监听键,首先需要在你的zk.xml中声明这个库属性。https:/www.zkoss.orgwikiZK_Configuration_Referencezk.xmlThe_Library_Propertiesorg.zkoss.zk.ui.invokeFirstRootForAfterKeyDown.enabled值为 "true"
这个库属性会将每一个键监听事件重定向到你的页面的根组件上.如果你不设置它,你将只能在一个组件有焦点时监听它的键。
2:按键声明你需要用以下方法声明你要监听的按键 comp.setCtrlKeys(ctrlKeys);
其中ctrlKeys是一个字符串,包含了你要监听的键,例如ctrl+v就是指 comp.setCtrlKeys("^v");
3:监听器你的示例代码中已经有了这个版本。你可以使用添加 addEventLister(this)
语法,但它使任务过于复杂化。最简单的选择是内联监听器,如果你不重复使用它。
//comp here is the root div of my page
comp.setCtrlKeys("^v");
comp.addEventListener(Events.ON_CTRL_KEY, new EventListener<Event>() {
@Override
public void onEvent(Event event) throws Exception {
Clients.log("do something at page level");
}
});
参见 这把琴 !!!! This FIDDLE CANNOT WORK FROM PAGE LEVEL !!!!由于库属性不能在zkfiddle上设置。只要在本地运行它,并在你的zk.xml中加入上面的属性,就可以拥有页面级的监听器。