ZK 如何订阅 KeyEvent 7.X
How to subscribe KeyEvent in ZK 7.X
我们正在创建一个 Window 来添加附件。可以通过拖放或使用 Ctrl+V 从剪贴板复制来添加附件。能够实现拖放但无法在 Window 或页面上订阅 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);
}
}
addEventListener 在实现 EventListener 的自定义 Window class 中。
this.addEventListener(Events.ON_CTRL_KEY,这个);
我在网上看到的所有代码示例都是带有 ZUL 文件的。但是我需要动态地使用 java 代码来实现。
我可以订阅其他事件,例如点击事件、关闭事件等
您需要配置一些东西来监听按键:
1:目标
如果你想监听整个页面的按键,你需要做的第一件事就是在你的zk.xml中声明这个库属性:
https://www.zkoss.org/wiki/ZK_Configuration_Reference/zk.xml/The_Library_Properties/org.zkoss.zk.ui.invokeFirstRootForAfterKeyDown.enabled
值为 "true"
此库 属性 将每个关键侦听器事件重定向到页面的根组件。
如果不设置,则只有在组件获得焦点时才能监听到按键。
2:密钥声明
您需要使用 comp.setCtrlKeys(ctrlKeys);
声明您收听的键
其中 ctrlKeys 是包含您要收听的键的字符串
例如,ctrl+v 将是 comp.setCtrlKeys("^v");
3:听者
您的示例代码已有此版本。您可以使用 add 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 !!!!此 FIDDLE 无法在页面级别运行!!!!由于库 属性 无法在 zkfiddle 上设置。只需 运行 在本地使用您的 zk.xml 包括上面的 属性 即可拥有页面级侦听器。
我们正在创建一个 Window 来添加附件。可以通过拖放或使用 Ctrl+V 从剪贴板复制来添加附件。能够实现拖放但无法在 Window 或页面上订阅 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); } }
addEventListener 在实现 EventListener 的自定义 Window class 中。
this.addEventListener(Events.ON_CTRL_KEY,这个);
我在网上看到的所有代码示例都是带有 ZUL 文件的。但是我需要动态地使用 java 代码来实现。
我可以订阅其他事件,例如点击事件、关闭事件等
您需要配置一些东西来监听按键:
1:目标 如果你想监听整个页面的按键,你需要做的第一件事就是在你的zk.xml中声明这个库属性: https://www.zkoss.org/wiki/ZK_Configuration_Reference/zk.xml/The_Library_Properties/org.zkoss.zk.ui.invokeFirstRootForAfterKeyDown.enabled 值为 "true"
此库 属性 将每个关键侦听器事件重定向到页面的根组件。 如果不设置,则只有在组件获得焦点时才能监听到按键。
2:密钥声明
您需要使用 comp.setCtrlKeys(ctrlKeys);
声明您收听的键
其中 ctrlKeys 是包含您要收听的键的字符串
例如,ctrl+v 将是 comp.setCtrlKeys("^v");
3:听者
您的示例代码已有此版本。您可以使用 add 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 !!!!此 FIDDLE 无法在页面级别运行!!!!由于库 属性 无法在 zkfiddle 上设置。只需 运行 在本地使用您的 zk.xml 包括上面的 属性 即可拥有页面级侦听器。