2009-12-19 52 views
1

我連着監聽到殼牌SWT.MouseUp和SWT.MouseDown事件,但是handleEvent方法永遠不會被解僱。我試着點擊窗口上的很多地方,但它沒有得到甚至在下面的代碼中的System.out.println(..)......添加監聽器殼牌SWT.MouseUp不起作用

你在這裏發現任何錯誤?

謝謝!

//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); 

(此複合材料是使用表單工具包Eclipse編輯器內)

問候,

-Pradyumna

回答

2

通過編寫

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

您添加監聽器到殼只有!點擊外殼的子項不會觸發c.getShell()的事件。嘗試點擊靠近窗口的邊界並留意您的跟蹤消息。

如果您想要獲取c上的點擊事件,您必須通過c.addListener(.)向c添加聽衆。如果你這樣做,你將不需要條件rect.contains(event.x, event.y),因爲你知道點擊發生在c上。

+0

謝謝。我的想法現在..但有沒有我們可以掛鉤一個方式監聽器當事件(如的MouseDown)發生在該複合材料的任何後代是被解僱的複合? – Pradyumna

+1

您可以遍歷組合的getChildren()並將偵聽器添加到每個組合。 –

+1

東西值得一提的可能是''Display.addFilter(。):您收到通知在人機界面的事件循環的任何事件。這並不完全是你所問的,在大多數情況下,這不是正確的做事方式,但在極少數情況下,它非常方便。 –