我们正在创建一个添加附件的窗口。可以通过拖动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/

10-13 07:05