2010-03-08 4 views
1

나는 새로운 복합 컨트롤을 만들기 위해 org.eclipse.swt.widgets.Composite를 하위 클래스 화했다. 이 컨트롤에서 MouseEnter 및 MouseExit 이벤트를 캡처하고 싶지만 문제는 마우스가 컨트롤의 구성 요소 (예 : 레이블) 위에 마우스를 올리면 MouseExit 이벤트가 발생한다는 것입니다. 레이블이 전체 합성물.마우스가 구성 요소 컨트롤에 들어갈 때 SWT 복합 컨트롤이 MouseExit 이벤트를 시작하지 못하게하려면 어떻게해야합니까?

이 이벤트가 시작되는 것을 막을 수있는 방법이 있습니까? 마우스가 컨트롤의 전체 경계를 벗어날 경우에만 이벤트를보고 싶습니다. 내가 의미하는 바를 보여주는 몇 가지 예제 코드가 있습니다.

public class MyControl extends Composite{ 

Label label; 

public MyControl(Composite parent, String label) { 
    super(parent, SWT.NONE); 
    label = new Label(this,0); 
    label.setText(label); 

    this.addListener(SWT.MouseEnter, new Listener() { 
     @Override 
     public void handleEvent(Event event) { 
      // handle this event 
     }   
    }); 
    this.addListener(SWT.MouseExit, new Listener() { 
     @Override 
     public void handleEvent(Event event) { 
      // handle this event 
     }   
    }); 
} 

}

답변

2

당신은 단순히 컨트롤이 새 컨트롤의 자식인지 확인하고 무시하는 이벤트 처리기에 논리를 넣을 수 있습니다. 다음과 같은 것 : (코드를 테스트하지는 않았지만 이것이 효과가 있다고 생각합니다.)

this.addListener(SWT.MouseExit, new Listener() { 
     @Override 
     public void handleEvent(Event event) { 
      for (Control control : ParentClass.this.getChildren()) { 
       if (control == event.item) 
        return; 
      } 
      // handler logic goes here 
     }   
    }); 
+0

정말 감사합니다. –

관련 문제