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");
}
}