Shell 객체는 이벤트를 위젯에 보내고 위젯은 이정보를 리스너로 불리는 인터페이스로 전달하고 리소드 메소드 중에 동작을 처리하는 이벤트 핸들러를 호출한다.
어댑터
어댑터는 추상클래스로서 Listener 인터페이스를 구현하고 필요한 각 메소드의 기본적인 구현을 제공한다.
필요한 메소드만 작성하면 된다.(리스너로 코딩하면 필요하지 않은 부분도 코딩해야 한다.)
즉, 위젯을 리스너가 아닌 어댑터와 연결한다면 조금더 편리하다.
케이스 1.
리스너로 코딩하기
Button.addMouseListener(new MouseListener()
{
Public void mouseDown(MosueEvent e){
Clkdevent();
}
어댑터로 코딩하기
Button.addMouseListener(new MouseAdapter()
{
Public void mouseDoublicClick(MouseEvent e)
{
Clkdevent();
}
}
Character : 누른 키를 나타내는 char 값을 제공한다.
stateMask : 키보드에서 기능키의 상태를 표현하는 정수를 반환한다. Alt, ctrl, shift, command키 등이 눌렸는지 확인하는데 사용된다.
Keycode : SWT 퍼블릭 상수에 해당하는 키 코드를 제공한다.
Public void keyPressed(KeyEvent e)
{
If((e.stateMask & SWT.ALT ) != 0 ) string += "ALT-"; //stateMask 필드를 검사하여 alt,ctrl,shift, command 키가 눌렸는지 확인한다.
}
Event.doit은 true이면 해당 행동을 하게 하고 false면 못하게 한다.
해당 위젯에 직접 Listener을 부여하는 것을 유형 리스너라고 하고 아래처럼 별도의 리스너를 사용하는것을 무형 리스너라고 한다.
Listener listener = new Listener()
{
Public void handleEvent(Event event)
{
}
}
코딩의 유연성은 무형리스너가 더 있으나 안정성은 유형 리스너가 더 있다.
Jface의 이벤트 처리
복잡한 사용자 인터페이스를 다룰때, 이벤트 핸들링 기능을 이벤트를 생성하는 GUI 컴포넌트로 부터 분리하는 것이 좋다.
-> 하나의 그룹이 GUI 처리에 대해 작업하고 다른 그룹은 외관 작업을 할 수 있다.
-> 리스너의 기능을 어떤 컴포넌트에다가 붙힐수도 있고 더욱 유연하게 사용이 가능하다.
그래서 Jface는 action과 actioncontributionitem 클래스를 분리해 제공한다.
간단히 말하면 actioncontributionitem이 gui 위젯의 기능과 그와 덧붙여진 리스너 클래스를 결합한다.
기본적으로 GUI에 이벤트 대입하는 것도 좋으나 자주 사용하는 action의 경우에는 분리해서 구성해서 여러곳에서 자유자재로 사용하는 것이 좋다. SWT 처럼 모든 위젯에 하나의 이벤트를 대입하게 되면 결국 코드가 복잡해질 수 있다.
루틴
SWT 이벤트 처리방 식처럼 Display 클래스로 시작하여 운영체제의 이벤트 큐를 모니터링 한다. 하지만 Display 클래스가 display의 shell 객체를포함하는 ApplicationWindow로 정보를 전달한다. ApplicationWindow는 Action 클래스를 생성하여 이를 원 이밴트를 생성한 컨트리 뷰션으로전달한다. 컨트리 뷰션은 단일 이벤트 핸들러 로써 Action 클래스의 run() 메소드를 호출한다.
SWT 이벤트와 동일해 보이나 컨트리뷰션 기능은 좀더 복잡하다. 두 개의 주요 컨트리 뷰션 관련 클래스는 ContributionItem 클래스와 ContributionManager 클래스 이다.
ContributionItem 클래스는 액션을 발생시키는 개별적인 GUI 컴포넌트를 제공하고 ContributionManager 클래스는 ContributionItem들을 포함할 수 있는 객체를 제공한다.
이 두개는 모두 추상 클래스로서 하위 클래스에서 구현한다.
ActionContributionItem 클래스는 ContributionItem의 많은 하위 구상 클래스중 하나지만 ApplicationWindow에서 GUI에 액션을 연결하기 위해 생성, 구현된다. 외관은 없지만 fill() 메소드의 사용에 따라 버튼, 메뉴바 항목, 툴바 항목의 형태를 취한다.
ContributionManager의 하위 클래스들은 Contributionitem의 컨테이너의 역할을 하며, Contributionitem을 묶어서 GUI 객체 구성 방식을 개선하고 프로그래밍을 편하게 한다. MenuManger 클래스는 contributionitem을 윈도우 상위 메뉴에 통합한다. 또한 ToolBarManager 클래스는이 객체를 메뉴 아래에 위치한 툴바를 둔다.
Jface의 이벤트 처리 규칙
- 사용자 입력은 버튼, 툴바, 메뉴를 포함한다.
- 각 컴포넌트는 단 하나의 연관 이벤트만을 갖는다.
- 각 이벤트는 단 하나의 이벤트 핸들러를 갖는다.
'RCP > SWT & JFACE' 카테고리의 다른 글
Menifest 파일 설명 (0) | 2016.12.24 |
---|---|
Action 클래스 살펴보기 (0) | 2016.12.24 |
event doit 설명 (0) | 2016.12.24 |
JFace TreeViewer설명 (0) | 2016.12.24 |
IWizardPage 인터페이스 (0) | 2016.12.24 |