[Java] Swing 특징 및 구조 & 사용법 총정리

     Swing이란? 

    자바의 JFC(Java Foundation Class)는 GUI 프로그래밍에 필요한 각종 킷을 모아놓은 것으로 현재는 GUI의 기능들을 구현할 수 있는 스윙, 2D, Drag&Drop 등을 지원합니다. 스윙을 사용하는 방법은 AWT와 거의 유사하나 AWT보다는 많은 컴포넌트 및 기능을 지원하고 있습니다. 스윙은 AWT와 달리 자바 프로그래밍으로 자체적인 제작된 컴포넌트이므로 플랫폼에 관계없이 모양이 동일하게 사용할 수 있습니다. 

    Swing특징

     

     Swing의 특징 

    1. 룩앤필(Look & Feel)

    스윙에서 가장 획기적으로 바뀐 것 중에 하나가 컴포넌트의 화려함입니다. 이러한 외관(Look & Feel)을 프로그램을 실행하는 도중에 여러가지 형태로 바꾸어 사용 할 수 있는 기능을 제공합니다. 스윙은 순수한 자바로만 만들어졌기 때문에 어떤 플랫폼에서라도 동일한 룩앤필(Look & Feel)을 유지할 수가 있습니다.

    룩앤필

    2. 경량의 컴포넌트 

    AWT에서 제공하는 컴포넌트들은 JVM이 기반으로 설치되어있는 네이티브 플랫폼에 의존하여 그 컴포넌트들을 그대로 가져다 사용하는 중량의 컴포넌트들입니다.  스윙은 순수 자바로 구현되어 있는 컴포넌트들이기 때문에 어떤 플랫폼을 사용하더라도 거기에 의존하지않고 독립적으로 사용할 수 있는 경량의 컴포넌트입니다.

     

    3. 더블버퍼링

    더블버퍼링기능은 그래픽의 성능을 향상시키기 위해 도입된 방식으로 AWT에서는 사용자에 의해 직접 구현해야 되지만 스윙에서는 자체적으로 더블버퍼링 기능을 제공합니다.

     

    4. ToolTip(풍선도움말)지원

    스윙에서 제공하는 컴포넌트들은 풍선 도움말을 지원합니다. javax.swing.JComponent 클래스의 메서드에서 setToolTipText(String text)메서드를 이용해서 마우스를 컴포넌트 위에 위치하게 되면 풍선도움말을 지원할 수 있습니다.

     

    5-1. Delegate 모델(MVC : Model-View-Controller) 

    MVC모델은 3가지로 구성되어 있는데, 컴포넌트가 표현해야 하는 자료 구조를 추상화하고 뷰 에게 필요한 데이터를 제공하는 모델(Model), 모델로부터 전달 받은 데이터를 화면에 표시하는 뷰(View), 모델과 뷰를 제어하면서 이벤트를 처리해 주는 컨트롤러(Controller) 가 담당을 합니다.

    MVC모델

     

    5-2. 실제적으로 스윙에 MVC 모델을 적용했을 때의 구조

    사용자가 컴포넌트에서 이벤트를 발생(Controller)시키게 되면 이벤트의 종류에 따라서 모델클래스 (Model)를 선정하게 된다.  선택된 모델클래스는 데이터를 처리하고 그 데이터를 다시 클라이언트에게 전송하여 출력(View)시킨다. 

    MVC구조

     

    6. 이미지 아이콘(ImageIcon) 지원

    텍스트뿐만 아니라 이미지를 화면에 출력시켜주는 기능을 가지고 있습니다. 자바 플랫폼에서 지원하는 모든 그래픽을 사용하여 보여줄 수 있고 현재 사용할 수 있는 이미지 데이터 포맷은 JPEG와 GIF입니다.

    이미지 아이콘

     

    7. 보더(Border) 지원 

    보더라(Border)란 컴포넌트의 경계선을 의미합니다. 컴포넌트들은 경계선(Border)이 존재하지 않지만 스윙부터는 이 경계선을 어떻게 보여줄지 를 결정할 수 있습니다.  스윙에서 제공하는 Border는 8가지가 있는데 서로 조함이 가능하기 때문에 상당히 많은 형태가 존재한다고 말할 수 있습니다.  보더를 지원해주는 패키지는 javax.swing.border 패키지에 포함되어 있습니다.

    보더지원

     

     Swing의 구조 

    보더라(Border)란 컴포넌트의 경계선을 의미합니다.  컴포넌트들은 경계선(Border)이 존재하지 않지만 스윙부터는 이 경계선을 어떻게 보여줄지를 결정할 수 있습니다. 스윙에서 제공하는 Border는 8가지가 있는데 서로 조합이 가능하기 때문에 상당히 많은 형태가 존재한다고 말할 수 있습니다.  보더를 지원해주는 패키지는 javax.swing.border 패키지에 포함되어 있습니다. 스윙의 기본구조는 아래와 같습니다.

    Swing 구조

     

    컨테이너 구조

    컨테이너구조

     

     

    스윙의 JFrame은 AWT의 Frame과 달리 좀 복잡한 구조로 되어있습니다. 프레임자체로 구성되어 있는 것이 아니라 그 안에 4개의 페인(pane)이 층으로 구성되어있습니다.  JFrame의 내부 구조는 아래의 그림을 참조하시면 될듯합니다.

    Swing JFrame

     

    스윙 컨테이너

    1. JRootPane

    실질적인 윈도우 기능을 수행하는 경량의 컨테이너입니다.  이러한 구조를 사용하는 것은 모든 윈도우들의 동작이나 사용방법등이 같아지고 다른 컴포넌트들과 잘 조화가 될 수 있도록 도와주기 때문입니다.  JRootPane은 GlassPane과 layeredPane으로 구성되어 있고, layeredPane은 JMenuBar와 contentPane을 포함합니다.

       

    2. layeredPane 

    루트 페인에 대해 레이어를 할 수 있도록 여러 층의 패널을 포함 할 수 있는 패널로 여러 컴포넌트들을 서로 오버랩(컴포넌트위에 다른 컴포넌트를 붙이는 작업) 할 수 있도록 합니다.  윗부분은 JMenuBar와 아래부분은 contentPane으로 이루어져 있습니다. contentPane : 일반적인 컴포넌트들을 가질 수 있는 패널입니다.  프레임 객체의 getContentPane()메서드를 이용해서 얻을 수 있습니다.

     

    3. glassPane

    기본적으로 숨겨진 상태로 되어 있으며, 다른 패널 위에 존재하는 패널입니다. 주로 마우스 이벤트를 처리하기 위해 가장 먼저 루트 페인에 추가됩니다.

     

    4.  JMenuBar

    윈도우의 메뉴를 제공하는 역할로 생략이 가능한 선택항목이다.  JMenu, JmenuItem등을 이용해서 메뉴를 구성하여 setJMenuBar()메서드을 이용해서 등록할 수 있습니다.

     

    [Java] 그래픽 GUI AWT 사용법

    [Java] GUI 이벤트란 무엇인가?

    [Java] Swing으로 만드는 미니언 성적관리프로그램 예제

     

     

    댓글

    Designed by JB FACTORY