2009-12-19 2 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); 

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

당신이 리스너를 추가를 작성하여

감사

-Pradyumna

답변

2

(이 복합은 양식 툴킷을 사용하여 이클립스 편집기 내부) 쉘에 ! 셸의 자식을 클릭해도 c.getShell()에 대한 이벤트가 트리거되지 않습니다. 창 경계 근처를 클릭하여 추적 메시지를주의하십시오.

클릭에 대한 이벤트를 c에 가져 오려면 c.addListener(.)을 통해 수신기에 수신기를 추가해야합니다. 그렇게하면 클릭이 c에서 발생한 것을 알기 때문에 rect.contains(event.x, event.y) 조건이 필요하지 않습니다.

+0

감사합니다. 지금 아이디어를 얻었습니다. 그러나 이벤트 (예 : MouseDown)가 해당 컴포지트의 자손에서 발생하면 해지되는 컴포지트에 리스너를 연결할 수있는 방법이 있습니까? – Pradyumna

+1

복합체의'getChildren()'을 반복 해 각각에 리스너를 추가 할 수 있습니다. –

+1

언급 할만한 가치가있는 것은'Display.addFilter (.)'일 수 있습니다 : 당신은 Display의 이벤트 루프에 어떤 이벤트에 대한 알림을받습니다. 이것은 정확히 당신이 요구하는 것이 아니며, 대부분의 경우 이것은 적절한 방법이 아닙니다. 그러나 아주 드문 경우가 있습니다. –

관련 문제