我在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
答案 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上。