Добавление слушателя в оболочку для SWT.MouseUp не работает - PullRequest
1 голос
/ 19 декабря 2009

Я подключил слушатель к командной консоли по событиям 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);

(Этот композит находится в редакторе Eclipse, который использует Forms Toolkit)

С уважением,

-Pradyumna

1 Ответ

2 голосов
/ 22 декабря 2009

письменно

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

вы добавляете слушателей в оболочку только ! Нажатие на дочерний элемент оболочки не вызывает событие для c.getShell(). Попробуйте щелкнуть рядом с границей окна и следите за своим сообщением трассировки.

Если вы хотите получать события для кликов на c, вы должны добавить слушателей к c через c.addListener(.). Если вы сделаете это, вам не понадобится условие rect.contains(event.x, event.y), потому что вы знаете, что щелчок произошел на c.

...