이벤트

표시 및 일부 위지트(widget)를 작성하고 응용프로그램의 메시지 루프를 시작한 경우 실제 작업은 어디에서 발생합니까? 대기열에서 이벤트를 읽어와서 위지트(widget)에 디스패치할 때마다 실제 작업이 발생합니다. 응용프로그램 논리의 대부분은 사용자 이벤트에 대한 응답으로 구현됩니다.

작성한 위지트(widget)에 리스너를 추가하는 것이 기본 패턴이고 적절한 이벤트는 실행할 리스너 코드에 발생합니다. 다음의 간단한 예는 org.eclipse.swt.examples.helloworld.HelloWorld3에서 개작한 것입니다.

      Display display = new Display ();
      Shell shell = new Shell (display);
      Label label = new Label (shell, SWT.CENTER);
   ...
shell.addControlListener(new ControlAdapter() {
      public void controlResized(ControlEvent e) {
      label.setBounds (shell.getClientArea ());
      }
   });

각 리스너 유형마다 리스너(XyzListener)를 정의하는 인터페이스, 이벤트 정보(XyzEvent)를 제공하는 클래스, 리스너를 추가하는 API 메소드(addXyzListener)가 있습니다. 리스너 인터페이스에 정의된 메소드가 하나 이상일 경우, 리스너 인터페이스를 구현하고 빈 메소드를 제공하는 어댑터(XyzAdapter)가 있습니다. 모든 이벤트, 리스너, 어댑터가 org.eclipse.swt.events 패키지에 정의되어 있습니다.

다음 테이블에서는 사용할 수 있는 이벤트와 각 이벤트를 지원하는 위지트(widget)를 요약합니다. 이벤트를 두 개의 일반 카테고리 즉, 제어에 대한 논리 조작을 표시하는 상위 레벨 이벤트와 보다 특정한 사용자 상호작용을 설명하는 하위 레벨 이벤트로 분할할 수 있습니다. 플랫폼마다 다를 수도 있는 다중 하위 레벨 이벤트로 상위 레벨 이벤트를 표시할 수 있습니다. 하위 레벨 이벤트는 일반적으로 사용자 정의 위지트(widget) 구현에만 사용해야 합니다.

상위 레벨 이벤트

이벤트 유형

설명

Activate, Decativate 제어가 활성화 또는 비활성화될 때 생성됩니다.
Arm 메뉴 항목이 제공됩니다(강조표시되어 선택될 준비가 됨).
Close 창 관리자가 요청한 대로 쉘을 닫습니다.
DefaultSelection 사용자가 기본 선택 조치를 호출하여 항목을 선택합니다. 예를 들어, Enter를 누르거나 테이블에서 행을 두 번 클릭합니다.
Dispose 프로그램적으로 또는 사용자가 위지트(widget)를 처리합니다.
DragDetect 사용자가 가능한 끌기 조작을 시작했습니다.
Expand, Collapse 트리의 항목을 펼치거나 접습니다.
Help 사용자가 위지트(widget)에 대한 도움말을 요청했습니다. 예를 들어, Windows에서 F1 키를 누르면 이렇게 됩니다.
Iconify, Deiconify 쉘이 최소화, 최대화 또는 복원되었습니다.
MenuDetect 사용자가 컨텍스트 메뉴를 요청했습니다.
Modify 위지트(widget)의 텍스트가 수정되었습니다.
Move, Resize 프로그램적으로 또는 사용자가 제어 위치를 변경했거나 제어 크기를 조정했습니다.
Selection 사용자가 제어의 항목을 선택합니다. 예를 들어, 테이블의 행을 한 번 클릭하거나 키보드를 사용하여 항목을 탐색합니다.
SetData 가상 테이블을 사용할 때 TableItem에 데이터를 설정해야 합니다.
Show, Hide 제어의 가시성이 변경되었습니다.
Traverse 사용자가 키스트로크를 사용하여 제어를 벗어나 순회를 시도하고 있습니다. 예를 들어, 이스케이프 또는 탭 키가 순회에 사용됩니다.
Verify 위지트(widget)의 텍스트가 수정됩니다. 이 이벤트는 응용프로그램이 텍스트를 수정하거나 수정을 방지할 수 있는 기회를 제공합니다.

하위 레벨 이벤트

이벤트 유형

설명

FocusIn, FocusOut 제어가 초점을 획득했거나 유실했습니다.
KeyDown, KeyUp 제어에 키보드 초점이 있을 때 사용자가 키보드 키를 눌렀거나 해제했습니다.
MouseDown, MouseUp, MouseDoubleClick 사용자가 제어 위에서 마우스를 눌렀거나 해제했거나 또는 마우스를 두 번 클릭했습니다.
MouseMove 사용자가 제어에서 마우스를 이동했습니다.
MouseEnter, MouseExit, MouseHover 마우스가 입력, 종료되었거나 또는 제어 위에 올려 놓았습니다.
MouseWheel 마우스 휠이 회전되었습니다.
Paint 제어가 손상되어 리페인팅이 필요합니다.

유형화되지 않은 이벤트

앞서 설명한 유형화된 이벤트 시스템 이외에 SWT는 하위 레벨의 유형화되지 않은 위지트(widget) 이벤트 메커니즘을 지원합니다. 유형화되지 않은 메커니즘은 이벤트 유형을 식별하는 상수에 따라 다르며 이 상수와 함께 제공되는 일반 리스너를 정의합니다. 그러면 리스너에서 "case style" 리스너를 구현할 수 있습니다. 다음 스니펫에서는 일반 이벤트 핸들러를 정의하고 여러 개의 리스너를 쉘에 추가합니다.

   Shell shell = new Shell();
   Listener listener = new Listener() {
      public void handleEvent(Event e) {
         switch (e.type) {
            case SWT.Resize:
               System.out.println ("Resize received");
      break;
            case SWT.Paint:
               System.out.println ("Paint received");
      break;
            default:
               System.out.println("Unknown event received");
         }
      }
   };
shell.addListener(SWT.Resize, listener);
shell.addListener(SWT.Paint, listener);