shell에 리스너를 추가하여 


shell이 최소화 되었을 때, 다시 최대화 되었을 때, 활성화 됬을 때 종료됬을 때 등


shell 자체의 이벤트에 대한 리스너를 설정할 수 있다. 


  shell.addShellListener(new ShellListener() {


      public void shellActivated(ShellEvent event) {

        System.out.println("activate");

      }


      public void shellClosed(ShellEvent arg0) {

        System.out.println("close");

      }


      public void shellDeactivated(ShellEvent arg0) {

      }


      public void shellDeiconified(ShellEvent arg0) {

      }


      public void shellIconified(ShellEvent arg0) {

      }

    });

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 이벤트 처리 규칙

  1. 사용자 입력은 버튼툴바메뉴를 포함한다.
  2.  컴포넌트는  하나의 연관 이벤트만을 갖는다.
  3.  이벤트는  하나의 이벤트 핸들러를 갖는다.


'RCP > SWT & JFACE' 카테고리의 다른 글

Menifest 파일 설명  (0) 2016.12.24
Action 클래스 살펴보기  (0) 2016.12.24
rcp프레임워크의 shell객체의 이벤트 처리 설명  (0) 2016.12.24
event doit 설명  (0) 2016.12.24
JFace TreeViewer설명  (0) 2016.12.24
IWizardPage 인터페이스  (0) 2016.12.24

+ Recent posts