当前位置: 首页 > 面试题库 >

SWT事件传播

苏鹏鹍
2023-03-14
问题内容

我试图检测包含多个其他组合的Composite控件上的单击事件。我试过了:

topComposite.addMouseListener(new MouseListener() {
        ...
        @Override
        public void mouseUp(MouseEvent arg0) {
            logger.info("HERE");
        });
});

但是该事件永远不会触发。我假设当鼠标事件发生在孩子身上时,它将沿着链条传播,但是不会发生。我该怎么做呢?


问题答案:

在SWT中,一般规则是事件 传播。对此的主要例外是遍历事件的传播-描述起来非常复杂。

最简单的回答你的问题是,你必须将监听器添加到 所有 的你的孩子Composite- 递归

例如这样

public void createPartControl(Composite parent) {
    // Create view...

    final MouseListener ma = new MouseAdapter() {
        @Override
        public void mouseDown(MouseEvent e) {
            System.out.println("down in " + e.widget);
        }
    };
    addMouseListener(parent, ma);
}

private void addMouseListener(Control c, MouseListener ma) {
    c.addMouseListener(ma);
    if (c instanceof Composite) {
        for (final Control cc : ((Composite) c).getChildren()) {
            addMouseListener(cc, ma);
        }
    }
}

e.widget如上所示,找到了单击的窗口小部件。一个重要的问题是,如果Controls以后添加更多内容,请记住再次执行此操作。



 类似资料:
  • 希望通过Eclipse RCP应用程序的代码自动触发树selectionChanged事件。任何指针都将不胜感激。

  • 问题内容: 我正在使用事件委托来侦听DOM中较低级的事件,但不适用于选择框上的onchange事件。onchange事件会传播还是冒充DOM? 谷歌搜索未能找到结论性的答案。 问题答案: 根据规范,,,应该气泡和和不应该泡沫。 此行为是正确实现在所有web浏览器除了IE <9,即,,,做适当气泡在IE> = 9。

  • 本文向大家介绍Android事件传递机制,包括了Android事件传递机制的使用技巧和注意事项,需要的朋友参考一下 实验环境 OS X 10.9 Eclipse(ADT) Android源码版本:API Level 19(Android 4.4) Android事件构成 在Android中,事件主要包括点按、长按、拖拽、滑动等,点按又包括单击和双击,另外还包括单指操作和多指操作。所有这些都构成了A

  • 所有,我想检测用户层选择,以便同步我的侧栏与显示的层。 但我在API引用中没有看到任何层控制事件;我如何判断当这样的用户层选择发生了? 作为另一种选择,我查看了layer load和unload事件,但在返回的内容中没有看到任何标识。我是不是错过了?

  • SWT

    SWT-"Standard Widget Toolkit",它是一个Java平台下开放源码的Native GUI组件库,也是Eclipse平台的UI组件之一。从功能上来说,SWT与AWT/SWING是基本等价的。SWT以方便有效的方式提供了便携式的 (即Write Once,Run Away)带有本地操作系统观感的UI组件: 由于widget系统的固有复杂性以及平台之间微妙的差异,即使在理想情况下

  • 我正在尝试处理用户的Backspace按键。我有2个处理程序绑定到一个输入元素。由于无法在onChange事件处理程序中检测按键,因此我必须在onKeyDown中进行。我想在按下backspace时停止onChange事件的传播(并在onKeyDown事件处理程序中处理)。有什么想法如何实现这一点?谢谢!