如何在ZK 7.X中订阅KeyEvent?

问题描述 投票:0回答:1

我们正在创建一个窗口来添加附件。附件可以通过拖拽或使用Ctrl+V从剪贴板复制来添加。能够实现拖放,但无法在窗口或页面上订阅KeyEvent。

尝试了以下代码,但失败了。

  1. 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);
        }
    } 
    
  2. 在实现EventListener的自定义Window类里面添加EventListener。

    this.addEventListener(Events.ON_CTRL_KEY, this);

我在网上看到的所有代码示例都是用ZUL文件。但我需要使用java代码动态地实现这一点。

我能够订阅其他事件,如点击事件,关闭事件等。

java zk zul
1个回答
3
投票

你要配置一些东西来监听键。

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中加入上面的属性,就可以拥有页面级的监听器。

© www.soinside.com 2019 - 2024. All rights reserved.