向 SWT.MouseUp 的 Shell 添加侦听器不起作用
Posted
技术标签:
【中文标题】向 SWT.MouseUp 的 Shell 添加侦听器不起作用【英文标题】:Adding a listener to the Shell for SWT.MouseUp doesn't work 【发布时间】:2010-12-28 07:59:57 【问题描述】:我在 SWT.MouseUp 和 SWT.MouseDown 事件上为 Shell 附加了一个侦听器,但 handleEvent 方法从未被触发。我尝试单击窗口上的许多地方,但它甚至没有到达下面代码中的 System.out.println(..)...
你发现这里有什么错误吗?
谢谢!
//c is a Composite.
final Listener l = new Listener()
public void handleEvent(Event event)
System.out.println("Got event. "+event);
Rectangle rect = c.getBounds();
if (rect.contains(event.x, event.y))
if((Boolean)c.getData("selected"))
c.setData("selected", Boolean.FALSE);
else
c.setData("selected", Boolean.TRUE);
;
c.getShell().addListener(SWT.MouseUp, l);
c.getShell().addListener(SWT.MouseDown, l);
(此组合位于使用 Forms Toolkit 的 Eclipse 编辑器中)
问候,
-Pradyumna
【问题讨论】:
【参考方案1】:通过写作
c.getShell().addListener(SWT.MouseUp, l);
c.getShell().addListener(SWT.MouseDown, l);
您将侦听器添加到外壳仅!单击 shell 的子级不会触发 c.getShell()
的事件。尝试在窗口边界附近单击并注意您的跟踪消息。
如果您想获取点击c
的事件,您必须通过c.addListener(.)
将监听器添加到c。如果您这样做,您将不需要条件rect.contains(event.x, event.y)
,因为您知道点击发生在 c 上。
【讨论】:
谢谢。我现在明白了.. 但是有没有一种方法可以将侦听器连接到复合材料,当事件(例如 MouseDown)在复合材料的任何后代上发生时触发? 您可以遍历组合的getChildren()
并向每个组合添加侦听器。
值得一提的可能是Display.addFilter(.)
:您会收到有关显示器事件循环中任何事件的通知。这不是您要问的问题,在大多数情况下这不是正确的做事方式,但在极少数情况下它真的很方便。以上是关于向 SWT.MouseUp 的 Shell 添加侦听器不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何向 Xamarin Forms App Shell Tabbar 添加顶部边框
请问hbase shell中向一个已创建的表中添加一个列族该怎么办呢?
java.lang.RuntimeException: RESTEASY013050: RESTeasy Provider Factory 为空,您是不是配置了 ResteasyBootstrap 侦