일요일 오후 낮잠 한숨 자고 일어나서 뭔가 해야 될거 같아서 컴 앞에 앉았다.

sk 와이번즈는 두산과의 3연전은 3연패로 마감하고 1등은 두산에 내어주었다. ㅠㅠ

네이버에서 실시간 보다가 짜증나서 그동한 jezzFlash에서 해결하지 못했던 문제를 해결하기로 마음 먹었다.


jezzFlash 를 개발하면서  발생한 몇가지 문제가 있었다.
첫 번째는, 읽고 쓰기 위해 생성한 쓰레드(Read/ Wirte)가 메인 프로그램이 죽어도 남아서 계속 존재하는 문제가 발생했다.
두 번째는, jezzSerial에서 읽어온 데이터를 jezzSerial을 상속받는 Protocol 에서 처리하기가 여간 곤란하다는 것이다.

첫번째 문제는, 영민이가 확인해 본결과 블럭되는 문제때문에 발생하는거 같다고 해서 소스코드에서 약간 수정을 했다.

먼저 쓰레드를 죽이고난후 시리얼 파일 디스크립터를 닫으니 정상적으로 쓰레가 종료 되었다. dieComThread() 에 구현하였다.

두번째 문제는 jezzSeial에서 데이터 읽어 오는 부분에 대한 메소드를 parcingRxData()를 만들었다.


protocol에서는 parcingRxData()을 재정의해서 사용하면 된다.

예를 들어 아래처럼 사용하면 된다.




<첨부파일>


[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문이 호출된다.





소스코드 보기


[SWT/JFace]1개 버튼에 2개 리스너 등록하기

자바/SWT / JFace | 2009.05.05 15:02 | Posted by imesu-문경원

아래 예제는 한개의 버튼에 대해서 두개의 리스너를 등록한 방법에 대한 예제이다.

아래 그림 "예" 버튼에 두개의 리스너를 등록했다.
첫번째, 마우스가 움직임에 대한 리스너(MouseTrackListener)
두번째, 버튼을 눌려 선택에 대한 리스너(SelectionListener)

버튼(컨트롤) 에 이벤트 리스너를 등록하는 방법은 아주 간단하다.

내가 사용고자 하는 컨트롤에 addXXXListener() 가 있으면 된다.
아래 소스의 경우, 내가 사용하고자 하는 버튼에 리스너
addMouseTrackListener ,
addSelectionListener
를 추가했다.







1. 실행 결과 


1) "예", "아니오" 버튼이 나온다.



2) 마우스를 "예" 버튼에 옮기면 MouseTrackListener 의 매소드 mouseEnter() 가 호출된다.


3) 마우스를 "예" 버튼에 계속 있음면  MouseTrackListener 의 매소드 mouseHover() 가 호출된다.


4) 마우스를 "예" 버튼에서 빠져 나오면   MouseTrackListener 의 매소드 mouseExit() 가 호출된다.



2. 전체 소스 보기




1. 과정



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



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


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




2. 실행결과




1. 닫기 버튼을 누른다.


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



3. 전체 소스 보기

[SWT/JFace] 시간 함수

자바/SWT / JFace | 2009.04.29 23:58 | Posted by imesu-문경원


   SimpleDateFormat format = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");    // yyy MM ...등은 이대로 써야한다.
   Date d = new Date();

   String str = format.format(d);    
   System.out.println("현재시간: " + str);    // 현재시간 표시

아래 샘플의 목적은 특정 파일을 읽어 들인 후에 내용을 화면에 뿌리기 위한 목적으로 만든 샘플이다.

1. 실행 결과




1)기본 화면이 뜬다.

2) 파일 열기 버튼을 누르면 아래의 탐색기가 나온다.


3) "file_read.java" 파일을 열어서, 내용을 화면에 표시한다.



2. 소스 분석




 

[SWT/JFace] 설치하기

자바/SWT / JFace | 2009.04.17 15:22 | Posted by imesu-문경원

SWT/JFace를 설치하면서 궁금한 점이  두가지 있었다.

"어떻게 프로젝트를 만들어야 하는가?"
"추가적인 프로젝트 생성 시 동일한 과정을 번복적으로 이루어져야 하는가" 



 첫번째 질문의 답은 이렇다.
일반적인 java 프로젝트로 만든 후 , SWT/JFace관련 부분인 Build Paeh를 추가해 주어야한다. 
왜냐하면, 이클립스에서는 SWT/JFace 프로젝트를 현재 바로 만들 수 없기 때문이다.

두번째 질문의 답은 반복적으로 해야 한다는 것이다.
많이 번거롭기는 하지만, 이클립스에서는 SWT/JFace 프로젝트를 현재 바로 만들 수 없기 때문에 어쩔 수 없다.
그나마 다행인 것은 첫번째 과정해서 만들어놓은 Build Path를 그냥 사용할 수 있다는 점이다.

아래의 과정을 차근차근 따라가면서 이클립스에서는 SWT/JFace 프로젝트를 만들어 봅시다.


1.일반적인 JAVA Project를 생성한다.





2. 자바 프로젝트를 선택한 후 Next를 누른다.





3. 프로젝트 명을정한다. 난 jazzSWT 라고 프로젝트 명을 설정했다.







4. Libraries를 선택한 후 Add_Varible.. 버튼을 누른다.

  




5.Configure Variables를 누른 후 PATH를 추가한다.

 




6. New 버튼을 누른 후 새로운, PATH를 추가한다. (그림 006.png)

 




7. 아래의 내용을 추가한다. (그림 012.png)

 
 

추가된 PATH

내용

BOOT_LIB

D:/Eclipse/eclipse/plugins/org.eclipse.core.boot_3.1.100.v20060603.jar

COMMAND_LIB

D:/Eclipse/eclipse/plugins/org.eclipse.core.commands_3.2.0.I20060605-1400.jar

COMMON_LIB

D:/Eclipse/eclipse/plugins/org.eclipse.equinox.common_3.2.0.v20060603.jar

JFACE_LIB

D:/Eclipse/eclipse/plugins/org.eclipse.jface_3.2.1.M20060908-1000.jar

RUNTIME_LIB

D:/Eclipse/eclipse/plugins/org.eclipse.core.runtime_3.2.0.v20060603.jar

SWT_LIB

D:/Eclipse/eclipse/plugins/org.eclipse.swt.win32.win32.x86_3.2.1.v3235.jar

WORKBENCH_LIB

D:/Eclipse/eclipse/plugins/org.eclipse.ui.workbench_3.2.1.M20060906-0800.jar


만일 프로젝트를 이미 생성한 후 사용 중이라면,  프로젝트 명에서 오른쪽 마우스를 클릭한 후 Properties를 누르면 면 PATH를 추가하는 화면을 찾을 수 있다.
여기서 Add Variable 버튼을 누르면 된다.






8. Class 를 생성하여 샘플 코드를 만들어 보자.

 





9. HellowWorld.java 와 HelloWorldJFace.java Class를 만들었다.


 



10. 샘플 코드를 작성한다.

 

샘플 1)  JFace 이용한 소스 <HelloWorld.java>


import org.eclipse.swt.SWT;

import org.eclipse.swt.widgets.Display;

import org.eclipse.swt.widgets.Shell;

import org.eclipse.swt.widgets.Text;

 

public class HelloWorld{

 

       public static void main(String[] args){

             Display display = new Display();

             Shell shell = new Shell(display);

      

             Text helloText = new Text(shell,SWT.CENTER);

             helloText.setText("Hello World!");

      

             helloText.pack();

             shell.pack();

 

             shell.open();

 

             while(!shell.isDisposed()){

                    if(!display.readAndDispatch()) display.sleep();

             }     

             display.dispose();

       }

}


샘플 2)  JFace 이용한 소스 <HelloWorldJFace.java>


import org.eclipse.jface.window.*;

import org.eclipse.swt.*;

import org.eclipse.swt.widgets.*;

 

public class HelloWorldJFace extends ApplicationWindow{

      

       public HelloWorldJFace(){

             super(null);

       }

       protected Control createContents(Composite parent){

             Text HelloWorldJFace = new Text(parent, SWT.CENTER);

            

             HelloWorldJFace.setText("Hello World JFace");

             parent.pack();

             return parent;

       }     

       public static void main(String[] args){

             HelloWorldJFace hw = new HelloWorldJFace();

             hw.setBlockOnOpen(true);        

             hw.open();

             Display.getCurrent().dispose();        

       }

}





11. 컴파일 한다.


 





12. 컴파일 할 것(SWT Application)을 선택한다.






13. 실행 결과

 
<HelloWorld.java>


<HelloWorldJFace.java>


[SWT-JFace] 좋은 참고 자료

자바/SWT / JFace | 2009.04.15 15:05 | Posted by imesu-문경원

## SWT 관련 사이트



# jigloo.com - 지글루

 

# SWT 예제 사이트 - 예제별 그림을 제공

 


SWT JFace Eclipse Screenshots
2D( 39 )  Application Window( 5 )  Browser HTML( 14 )  Busy Indicator( 1 )  Button( 14 )  Calculator( 2 ) 
Calendar( 1 )  Canvas( 3 )  Caret( 2 )  Clipboard( 5 )  Combo( 8 )  CoolBar( 12 ) 
Cursor( 5 )  Custom Control( 3 )  Dialog( 24 )  Drag Drop( 11 )  Eclipse Plugin( 24 )  Editor( 8 ) 
Event( 10 )  File Browser( 2 )  File Dir Chooser( 4 )  Focus( 1 )  Font( 4 )  Form( 4 ) 
Group( 6 )  I18N( 1 )  Image( 16 )  JFace Dialog( 6 )  JFace Registry( 2 )  Label( 19 ) 
Layout( 50 )  Link( 2 )  List Viewer( 2 )  List( 11 )  Menu( 17 )  Monitor( 1 ) 
Mouse Key( 10 )  MVC( 1 )  OpenGL( 3 )  Password( 3 )  PopupList( 1 )  Preferences( 3 ) 
Print( 9 )  ProgressBar( 7 )  Radio Button( 3 )  Sash( 6 )  SashForm( 4 )  Scale( 3 ) 
Scroll( 7 )  ScrollBar( 1 )  Shell Display( 26 )  Slider( 5 )  Small Application( 8 )  Spinner( 4 ) 
Split( 1 )  Status Bar( 3 )  StyledText( 9 )  SWT Swing AWT( 4 )  Tab( 11 )  Table( 53 ) 
TableTree( 3 )  Text( 26 )  Thread( 2 )  ToolBar( 13 )  Tooltips( 2 )  Tree( 21 ) 
Undo Redo( 1 )  View Form( 2 )  WIN32( 13 )  Wizard( 4 ) 
 



# eclipsewiki - Eclipse Projects 중 Visual Editor관련

SWT Library를 Java Build Path에 추가시켜주기 때문에 좀 더 편하게 SWT Standalone Application을 테스트할 수 있음

 


 

## SWT 관련 개발도구



 

# Sleak -SWT 그래픽 자원을 모니터링 하는 도구   


# SWT Spy - Style, layout, 부모 정보등을 보여주는 스파이 도구

 


 

티스토리 툴바