我们正在创建一个添加附件的窗口。可以通过拖动N拖放或使用Ctrl + V从剪贴板复制来添加附件。能够实现拖放,但是无法在Window或Page上订阅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类中的addEventListener。
this.addEventListener(Events.ON_CTRL_KEY,this);
我在网上可以看到的所有代码示例都是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:听众
您的示例代码已具有此版本。您可以使用添加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 !!!!该用户无法通过页面级别使用它!由于无法在zkfiddle上设置库属性。只需使用您的zk.xml(包括上面的属性)在本地运行它,即可拥有页面级侦听器。
关于java - 如何在ZK 7.X中订阅KeyEvent,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61395947/