IT/RCP

[SWT] 이벤트

원창연 2020. 12. 19. 23:21

   이벤트라 함은 버튼클릭, 텍스트 내용이 변경된경우 등등의 해당되며, 이와 SWT에서 이벤트

를 알아보고자 합니다.

먼저 이벤트 종류에 대해 알아봅시다.

 

1) 유형이벤트 : key클릭, 마우스 up 등등 특정이벤트
2) 무형이벤트 : 특정을 지칭하지 않은 이벤트들
3) 어뎁터 : 이벤트를 전부 구현하지 않고 필요한것만 구현토록 구조화
4) 이벤트를 받아 리스너에서 보통은 처리하는 메서드 구현 즉 연결관계에 있다 

참고로 자바 이벤트와 비슷하다.

1.1 이벤트 유형 리스너와 리스너 메소드

 

1.2 이벤트의 구현

이벤트 리스너의 구현방식 두가지 : 익명구현, 외부클래스

1) 익명구현방식 : 장)소스가 즉흥적 가능, 단)재활용이 안됨

helloBtn.addMouseListener(new MouseListener() {  //==>익명구현   
   @Override
   public void mouseUp(org.eclipse.swt.events.MouseEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("마우스 업");
    
   }
   
   @Override
   public void mouseDown(org.eclipse.swt.events.MouseEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("마우스 다운");
   }
   
   @Override
   public void mouseDoubleClick(org.eclipse.swt.events.MouseEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("마우스 더블클릭");
   }
  });

2) 외부클래스 구현방식 : 장)재활용가능

   
   MouseListener ExMouseListener = new MouseListener() {  //==>외부클래스구현
   @Override
   public void mouseDoubleClick(MouseEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("마우스 더블클릭");
   }
   @Override
   public void mouseDown(MouseEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("마우스 다운");
   }
   @Override
   public void mouseUp(MouseEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("마우스 업");
   }
   
  };

helloBtn.addMouseListener(ExMouseListener); //외부클래스 사용

1.3 어뎁터

 앞 이벤트에서는 특이한 것은 내부 메소드가 모두 @Override된 것을 알수 있다. 구현하지 않아도 선언되지 않으면 안되는 반면 어뎁터는 구현하고 싶은 것들만 구현하도록 되어 있다

즉 익명의 인터페이스를 사용하지 않고 또한 모든메소드를 구현하지 않기 위해 어댑터라 부르는 특별한 클래스로 사용하여 구현 :: 내부 메소드를 필요한것만 사용가능

1) 익명구현

helloBtn.addMouseListener(new MouseAdapter() {  //==>익명구현
  
   public void mouseDown(org.eclipse.swt.events.MouseEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("마우스 다운");
   }
 });

2) 외부클래스 구현

MouseListener ExMouseListener = new MouseAdapter() {  //==>외부클래스구현
   
   public void mouseDown(MouseEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("마우스 다운");
   }
   public void mouseUp(MouseEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("마우스 업");
   }   
  };

helloBtn.addMouseListener(ExMouseListener) ; //외부클래스 사용

1.4 어뎁터  종류

 

※ 참고 사항 Event에서 keyCode(KeyListne/KeyAdapter에서 사용)

 

1.5 무형이벤트

   특정이벤트가 아니라 모든 이벤트처리 대표로처리할수 있는 Listener 클래스이다

    ▶ JFaceTestMain.java작성

import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
 
public class JFaceTestMain extends ApplicationWindow {
  
 public JFaceTestMain() {
  super(null);
  // TODO Auto-generated constructor stub
 }
 protected Control createContents(Composite parent) {
  System.out.println("test main createContents");
  new IntangibleEventTest(parent);
  parent.pack();
  return parent;
 }
 
 public static void main(String[] args) {
  JFaceTestMain obj = new JFaceTestMain();
  obj.setBlockOnOpen(true);
  obj.open();
   
  Display.getCurrent().dispose();
 }
}

 IntangibleEventTest.java작성

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
 
public class IntangibleEventTest extends Composite{
 
 Label output;
  
 public IntangibleEventTest(Composite parent) {
   
  super(parent, SWT.NULL);
  System.out.println("test IntangibleEventTest");
  Button typed = new Button(this,SWT.PUSH);
  typed.setText("Typed");
  typed.setLocation(2,10);
  typed.pack();
   
  typed.addKeyListener(new KeyAdapter() {
   public void keyPressed(KeyEvent e) {
    keyHandler();
   }
 
 
  });
   
  Button untyped = new Button(this,SWT.PUSH);
  untyped.setText("UnTyped");
  untyped.setLocation(80,10);
  untyped.pack();
  untyped.addListener(SWT.MouseEnter, UntypedListener);
  untyped.addListener(SWT.MouseExit, UntypedListener);
   
  output = new Label(this,SWT.SHADOW_OUT);
  output.setBounds(40,70,90,40);
  output.setText("No Event");
   
  pack();
   
 }
  
 Listener UntypedListener = new Listener(){
 
  @Override
  public void handleEvent(Event event) {
   System.out.println("handleEvent:"+event.widget.getClass().getSimpleName() );
   switch(event.type) {
    
   case SWT.MouseEnter:
    output.setText("Mouse Enter");
    break;
   case SWT.MouseExit:
    output.setText("Mouse Exit");
    break;
   }
    
  }
   
 };
 
 void keyHandler() {
  // TODO Auto-generated method stub
  output.setText("Key Event");
 }
}