[Autopacage] 2009년 5월 6일 첫삽(?) 뜨다.

자바 | 2009.05.06 16:28 | Posted by imesu-문경원
임베디드 보드의 시리언 콘솔은 다양한 역할을 한다.

특히나 디버깅에 상당히 요긴한데, 시리얼 케이블과 몇가지 시리얼 통신 설정만 하여 간단히 디버깅할 수 있다.

그런데 Falinux의 Autopacage이라는 프로그램을 보면 생산을 위한 용도로 사용되고 있다.

예전에도 한번 만들어 볼 생각을 하다가 중도에 그만 두곤 했는데

이벤에 자바SWT를 하면서 다시 진행해 보려는 생각이 문뜩 들었다.

그래서 개발일지를 차근 차근 써 볼까 한다.

현재 대략적은 화면 구성은 마쳤고, 우선을 동일하게 만들었다.



시리얼 콘솔을 이용해서 메시지를 내가 만든 Autopacage에 화면에 뿌리는 일을 진행 중이다.

시리얼 관련 부분은 유영창 선배님이 남든 소스를 가져가다 쓰고 있다. ^^

현재는 [open port] 버튼을 누르면 유영창 선배님이 만든 시리얼 창이 나온다.

시리얼 포트를 열고 장비와 연결하니까.

커널 어떤 메시지가 나온다. 굿~

그런데 화면에 깨져서 나온다. 여기에 대한 보정인 나중에 하고

우선 오늘은 오늘 까지 디버깅 메시지 [Terminal]를 화면에 뿌릴 수 있게 해야지 ~~^^

고고~

[SWT/JFace]범용 리스너 만들기

자바/SWT / JFace | 2009.05.05 16:14 | Posted by imesu-문경원


이전 예제에서 마우스 움직임에 대한 처리를 하기 위해서 MouseTrackListener를 사용하고,
버튼을 눌려 선택하기를 위해서 SelectionListener를 사용했다.

타입이 정해져 있는 이벤트의 경우, 해당 타입이 있는 리스너를 개별적으로 호출하여 사용해야 하는데

내가 원하는 이벤트 타입을 모아서 새로운 타입의 이벤트 리스너를 만드는 방법이 없을까? 궁금했었다.

역시 자바는 실망을 시키지 않았다. handleEvent()를 이용하면 위젯에서 어떤 이벤트가 발생하더라도 처리할 수 있다. ^^



구현 방법


1) 리스너를 만든다. 이때 반드시 handleEvent() 매소드를 재정의한다.  handleEvent() 메소드 내부네 swtich...case문을 이용하여 원하는 처리하고자 하는 이벤트를 추가한다.



2) 컨드롤에 리스너를 등록한다.


글의 마지막 샘플 코드를 보면 이곳에 3가지 이벤트를 추가한 샘플을 볼 수 있다.

    • SWT.MouseEnter
    • SWT.MouseExit
    • SWT.Selection

 
실행 결과  


1) 처음 화면입니다. 버튼을 두개 만듭니다.



2) 왼족 버튼에 마우스 포인터를 이동하여 들어가면 handleEvent() 에서 SWT.MouseEnter의 case문이 호출된다.


3) 왼족 버튼에 마우스 포인터가 빠져 나가면  handleEvent() 에서 SWT.MouseExit의 case문이 호출된다.



4) 오른족 버튼에 마우스 포인터를 이동하여 들어가면 handleEvent() 에서 SWT.MouseEnter의 case문이 호출된다.


5) 오른족 버튼에 마우스 포인터가 빠져 나가면  handleEvent() 에서 SWT.MouseExit의 case문이 호출된다.



6) 왼족 버튼에 마우스 오른쪽 버튼을 클릭하면  handleEvent() 에서 SWT.Selection의 case문이 호출된다.





소스코드 보기



1. 과정



1)  윈도우의 '닫기' 버튼을 누를때 발생하는 이벤트를 처리하기 위해서 리스너를 생성한다.  
여기선 ShellListener 를 생성하였다. 



2) 리스너를 사용했기 때문에, 반드시 해당 리스너(ShellListener)에 속해있는 모든 매서드를 재정의 해야한다.


3. addXXXListenerr에 등록한다. 우리가 사용할 매소드는 shell.addShellListener(shellListener) 이다.




2. 실행결과




1. 닫기 버튼을 누른다.


2. 메시지 박스가 나온다.



3. 전체 소스 보기