2008년 09월 20일
SWING의 LookAndFeel
AWT와 SWING에 대한 기초적인 공부를 맞히고 SWING을 이용해 그 동안 개발한 서버의 UI를 만들고 있습니다. 입사해서 처음으로 클래스 설계부터 코딩까지 혼자 진행한 자바 프로젝트인데요. 이제 UI작업만 끝내면 다음 주 부터는 테스트에 들어 갑니다. ㅎㅎ

SWING으로 UI를 거의 다 만들고 보니 각 컨트롤의 모습이 왠지 윈도우의 컨트롤과는 이질감이 있다는 것을 알게 되었습니다.
AWT로 UI를 만들었을때는 이질감을 못 느꼈는데 SWING에서는 왜 이런 느낌을 받았을까요?  다시 초심으로 돌아가 문서를 차근차근 읽어보니 AWT와 SWING에는 재미있는 차이점이 있더군요 ^^ (빨리 사용법을 익혀서 UI를 만들려고 덤비다 보니 개론적인 부분의 공부를 게을리 했네요 ㅡㅜ)
 
AWT와 SWING의 대표적인 차이점으로는 각 컴포넌트(MFC에서 컨트롤을 자바에서는 컴포넌트라고 부르네요. 아 ~ 자꾸 헷갈려요 ;;)를 처리하는 대행 모듈이 플랫폼에 종속적인가 아닌가라고 합니다.

AWT의 대행 모듈은 플랫폼에서 제공되는 윈도우 시스템의 각 컴퓨넌트들이라고 합니다. 즉, AWT의 버튼이나 스크롤바들은 실제로 AWT가 돌아가는 각 윈도우 시스템의 컴포넌트를 이용하는 것이라고 하네요. 다시 말해서 AWT는 플랫폼에 종속적인 GUI 모듈을 자바에서 사용할 수 있도록 껍데기를 제공하고 있는 것이라고 생각하면 됩니다. 이런 구조의 장점은 적은 코드로 여러 종류의 윈도우 플랫폼에서 쉽게 윈도우 시스템을 갖출 수 있다는 점이라고 합니다. 이것은 대행 모듈이 이미 플랫폼에서 제공 되기 때문이라고 합니다. 하지만 대행 모듈이 플랫폼에 종속적이기 때문에 실행되는 플랫폼의 종류에 따라서 윈도우의 화면이나 컴포넌트의 모습이 달라지게 됩니다. 따라서 일관된 화면을 보이는 것이 불가능합니다. 이렇게 대행모듈이 플랫폼 종속적인 경우의 컴포넌트를 "heavy weight component"라고 합니다.

SWING은 화면 처리의 대행을 위해 ComponentUI 클래스를 사용합니다. AWT와 달리 ComponentUI 클래스는 자바로 작성되어 있기 때문에 어떤 플랫폼에서도 일관된 화면을 보여줄 수 있습니다. 이렇게 플랫폼의 윈도우 시스템에 종속적이지 않은 컴포넌트를 "light weight component"라고 합니다.

결국, SWING에서는 자바로 만들어진 ComponentUI 클래스를 사용하기 때문에 기존 어플리케이션의 UI와 SWING으로 개발한 서버 UI가 이질감을 느끼게 한 요인이었습니다. 그러니까 SWING으로 개발한 일반적은 UI의 경우 아래 그림과 같은 모습을 갖게 되는 거죠 ~ 이전에 포스팅했던 AWT의 로그인 UI를 SWING으로 고친 모습입니다.


그럼 SWING에서 각 플랫폼의 UI의 모습을 보여줄 수 있는 방법은 없는걸까? 고민에 빠진 저는 얼른 인터넷을 검색해보니 자바에서는 이미 개발자가 각 컴포넌트의 모습을 결정할 수 있도록 UIManager 클래스를 제공하고 있었습니다.


  /*
   *  운영체제에 따라 그에 해당하는 LookAndFeel 적용 !!
   */

  public static void setComponentLookAndFeel() 
  {

    String lookAndFeel = "";

    // 현재 자바 가상머신이 운영되고 있는 플랫폼의 LookAndFeelClass의 이름을 얻어 옵니다.
    lookAndFeel = UIManager.getSystemLookAndFeelClassName();

    try 
    {
      // 현재 자바 가상머신이 운영되고 있는 플랫폼의 LookAndFeel 적용 !!
      UIManager.setLookAndFeel(lookAndFeel);
    
    catch (Exception e
    {
      e.printStackTrace();
    
  }


아래 그림은 위 메소드를 호출하여 실행 한 로그인 UI의 모습입니다. 제가 사용하고 있는 Windows XP의 모습을 잘 표현하고 있네요 ^^




※ 위 글에 대한 잘못된 부분이나 궁금하신 부분에 대한 피드백은 언제나 환영입니다 ~ 물론, 퍼가신다면 영광이구요.
   우리나라의 모든 개발자 분들께서 바쁘시지만 서로 자신의 귀중한 경험과 지식을 공유해서 함께 발전해 나갈 수 있었으면 합니다 ^^

< 참고 문헌 및 웹 사이트 >

대림 출판사 JAVA2 JDK 5.0
Sun Developer Network Korea - 스윙 룩앤필

전체 소스 다운로드 : Subject_1.java

by greenfrog | 2008/09/20 16:02 | JAVA | 트랙백 | 덧글(1)
트랙백 주소 : http://greenfrog7.egloos.com/tb/850981
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 감사 at 2010/09/27 12:42
이해가 잘 안갔었는데 감사^^

:         :

:

비공개 덧글



<< 이전 페이지 | 다음 페이지 >>