向SWT.MouseUp的Shell添加侦听器不起作用

时间:2009-12-19 14:53:50

标签: swt mouseevent listener

我在SWT.MouseUp和SWT.MouseDown事件上附加了一个侦听器,但是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 个答案:

答案 0 :(得分:2)

写作

c.getShell().addListener(SWT.MouseUp, l);
c.getShell().addListener(SWT.MouseDown, l);

您将监听器添加到shell !单击shell的子项不会触发c.getShell()的事件。尝试在窗口边框附近单击并注意跟踪消息。

如果您想获得c点击的活动,则必须通过c.addListener(.)向c添加听众。如果你这样做,你将不需要条件rect.contains(event.x, event.y)因为你知道点击发生在c上。