the jfc swing a guide to constructing guis (introduction)

24
THE JFC SWING A Guide to Constructing GUIs (Introduction) Data Warehousing Lab. Data Warehousing Lab. Cho Hye-Young Cho Hye-Young

Upload: adia

Post on 05-Jan-2016

91 views

Category:

Documents


0 download

DESCRIPTION

THE JFC SWING A Guide to Constructing GUIs (Introduction). Data Warehousing Lab. Cho Hye-Young. Book & Reference http://java.sun.com/docs/books/tutorial/uiswing/index.html The JFC Swing Tutorial A Guide to Constructing GUIs by Kathy Walrath & Mary Campione. INDEX. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: THE JFC SWING A Guide to  Constructing GUIs (Introduction)

THE JFC SWINGA Guide to Constructing GUIs

(Introduction)

Data Warehousing Lab.Data Warehousing Lab.

Cho Hye-YoungCho Hye-Young

Page 2: THE JFC SWING A Guide to  Constructing GUIs (Introduction)

2Data Warehousing

Lab.DW

INDEX

Getting Started with Swing Getting Started with Swing Swing Features and Concepts Swing Features and Concepts Using Swing ComponentsUsing Swing Components

Book & ReferenceBook & Referencehttp://java.sun.com/docs/books/tutorial/uiswing/index.htmlThe JFC Swing Tutorial

A Guide to Constructing GUIs

by Kathy Walrath & Mary Campione

Page 3: THE JFC SWING A Guide to  Constructing GUIs (Introduction)

3Data Warehousing

Lab.DW

Getting Started with Swing

1. JFC1. JFC 와 스윙에 대해와 스윙에 대해 2. 2. 스윙 프로그램의 컴파일과 실행스윙 프로그램의 컴파일과 실행 3. 3. 스윙 애플릿의 실행스윙 애플릿의 실행 4. 4. 스윙 애플리케이션의 코드 맛보기스윙 애플리케이션의 코드 맛보기

Page 4: THE JFC SWING A Guide to  Constructing GUIs (Introduction)

4Data Warehousing

Lab.DW

1. JFC 와 스윙에 대해 JFCJFC 와 스윙이란와 스윙이란 ??

JFC(Java Foundation Classes) GUIGUI 를 구축하는 일련의 기능 요소들을 묶은 것를 구축하는 일련의 기능 요소들을 묶은 것 JFC JFC 기능 요소기능 요소

스윙 컴포넌트들 버튼버튼 , , 스플리트 창스플리트 창 , , 테이블 등 테이블 등

교체 가능한 외양 (pluggable look & feel) 지원 외양 즉외양 즉 , , GUIGUI 의 겉모습과 작동 방식을 선택의 겉모습과 작동 방식을 선택 // 교체할 수 있도록 하는 기능 교체할 수 있도록 하는 기능

접근 지원 API(Accessiblity API) 화면의 내용을 음성으로 읽어주거나 점자로 출력하는 등의 장애자용 화면의 내용을 음성으로 읽어주거나 점자로 출력하는 등의 장애자용

인터페이스에 관련된 기능인터페이스에 관련된 기능 Java 2D API(JDK 1.2 이상 )

고품질의 고품질의 22DD 그래픽그래픽 , , 텍스트텍스트 , , 이미지를 애플리케이션이나 애플릿에서 쉽게 이미지를 애플리케이션이나 애플릿에서 쉽게 사용하는데 관련된 기능사용하는데 관련된 기능

드래그 - 드롭 지원 (JDK 1.2 이상 ) 자바 애플리케이션과 운영체제 고유의 애플리케이션 사이에서 끌어다 놓기를 자바 애플리케이션과 운영체제 고유의 애플리케이션 사이에서 끌어다 놓기를

지원하는데 관련된 기능지원하는데 관련된 기능

Swing 새로운 컴포넌트들과 관련 새로운 컴포넌트들과 관련 APIAPI 를 지칭를 지칭 javax.swingjavax.swing

Java Look & Feel

CDE/Motif Look & Feel

Windows Look & Feel

Page 5: THE JFC SWING A Guide to  Constructing GUIs (Introduction)

5Data Warehousing

Lab.DW

스윙 컴포넌트들 Top-Level Containers

Applet Dialog Frame

Special-Purpose Containers

Internal frame Layered pane Root pane

Basic Controls

Buttons Combo box List

Menu Slider Text fields

Color chooser File chooser

Table Text Tree

Editable Displays of Formatted Information

Uneditable Information Displays

Label Progress bar Tool tip

General-Purpose Containers

Panel Scroll pane Split pane Tabbed pane Tool bar

Page 6: THE JFC SWING A Guide to  Constructing GUIs (Introduction)

6Data Warehousing

Lab.DW

1. JFC 와 스윙에 대해 스윙 스윙 APIAPI 가 포함된 릴리즈는가 포함된 릴리즈는 ??

Java 2 SDK, Standard Edition, (J2SE) v 1.4. JFC 1.1(use JDK 1.1)

Page 7: THE JFC SWING A Guide to  Constructing GUIs (Introduction)

7Data Warehousing

Lab.DW

1. JFC 와 스윙에 대해 어떤 스윙 패키지를 써야 하는지어떤 스윙 패키지를 써야 하는지 ??

JFC 1.1 release (public packages):

javax.accessibility javax.swing javax.swing.border javax.swing.colorchooser javax.swing.event

javax.swing.filechooser javax.swing.plaf javax.swing.plaf.basic javax.swing.plaf.metal

javax.swing.plaf.multi javax.swing.table javax.swing.text javax.swing.text.html

javax.swing.tree javax.swing.undo javax.swing javax.swing.event(not always required)

Page 8: THE JFC SWING A Guide to  Constructing GUIs (Introduction)

8Data Warehousing

Lab.DW

1. JFC 와 스윙에 대해 스윙 컴포넌트들과 스윙 컴포넌트들과 AWT AWT 컴포넌트들의 차이점컴포넌트들의 차이점 ??

스윙 컴포넌트들은 특정 플랫폼에 의존적인 코드가 전혀 포함되지 않고 구현되었다

스윙 컴포넌트들 AWT 컴포넌트들

class JButton(J 로 시작 ) Button

package javax.swing java.awt

code 플랫폼에 비의존적 플랫폼에 의존적

capabilities모든 플랫폼 공통기능에 제한되지 않아 많은 기능 .

모든 플랫폼 공통기능에 제한

Integration & add on

Java2 플랫폼의 일부로 통합 , 추가판 형태도가능 -

look and feel 프로그램의 GUI 가 외양을 선택 / 변경 가능 해당 플랫폼의 것을 따름

model 모델을 이용해 상태유지 -

Page 9: THE JFC SWING A Guide to  Constructing GUIs (Introduction)

9Data Warehousing

Lab.DW

1. JFC 와 스윙에 대해 스윙 컴포넌트들과 스윙 컴포넌트들과 AWT AWT 컴포넌트들의 차이점컴포넌트들의 차이점 ??

스윙 컴포넌트들은 AWT 컴포넌트들보다 뛰어난 기능을 제공한다

버튼버튼 // 레이블에 텍스트 뿐만 아니라 이미지도 표시가능레이블에 텍스트 뿐만 아니라 이미지도 표시가능 대부분의 스윙 컴포넌트들은 테두리의 추가 변경 용이대부분의 스윙 컴포넌트들은 테두리의 추가 변경 용이 모양이나 행동 변경 용이모양이나 행동 변경 용이 (( 메서드 호출메서드 호출 , , 서브클래스 사용서브클래스 사용 )) 직사각형 이외의 모양도 가능직사각형 이외의 모양도 가능 ((ex.ex. 둥근 버튼둥근 버튼 )) 보조적 기술들의 스윙 컴포넌트 정보 획득 용이보조적 기술들의 스윙 컴포넌트 정보 획득 용이 ((ex.ex. 버틀버틀 //

레이블의 텍스트레이블의 텍스트 )) 스윙 컴포넌트 사용시 주의점

스윙 컴포넌트들과 함께 “중량스윙 컴포넌트들과 함께 “중량 ((heavyweight)”heavyweight)” 컴포넌트들을 컴포넌트들을 사용하면 안된다사용하면 안된다 ..

스윙 컴포넌트들은 “스레드스윙 컴포넌트들은 “스레드 ((thread)”thread)” 에 안전하지 않다에 안전하지 않다 .. 스윙 컴포넌트들을 포함하는 윈도우나 애플릿을 위한 포함관계 스윙 컴포넌트들을 포함하는 윈도우나 애플릿을 위한 포함관계

계통구조계통구조 ((containment hierarchy)containment hierarchy) 의 루트에 스윙의 최상위 의 루트에 스윙의 최상위 컨테이너가 있어야 한다컨테이너가 있어야 한다 ..

JFrame JFrame 같은 최상위 컨테이너에 직접 컴포넌트를 추가하지 같은 최상위 컨테이너에 직접 컴포넌트를 추가하지 않는다않는다 ..

Page 10: THE JFC SWING A Guide to  Constructing GUIs (Introduction)

10Data Warehousing

Lab.DW

2. 스윙 프로그램의 컴파일과 실행 스윙 프로그램의 컴파일과 실행스윙 프로그램의 컴파일과 실행 ((Java2 Platform)Java2 Platform)

Step Java 2 platform Java 2 platform 의 최신 의 최신 release release 설치설치 스윙 컴포넌트 들을 사용하는 프로그램 작성스윙 컴포넌트 들을 사용하는 프로그램 작성 프로그램 컴파일프로그램 컴파일

javac -deprecation SwingApplication.java javac -deprecation SwingApplication.java 프로그램 실행프로그램 실행

Standard Look & Feel

java SwingApplication java SwingApplication nonstandard look and feel

Solaris: java -classpath .:/home/me/lnfdir/newlnf.jar SwingApplication

Win32: java -classpath .;C:\java\lnfdir\newlnf.jar SwingApplication

SwingApplication.java

Page 11: THE JFC SWING A Guide to  Constructing GUIs (Introduction)

11Data Warehousing

Lab.DW

3. 스윙 애플릿의 실행 StepStep

브라우저에 적합한 자바 플러그인 또는 applet viewer 다운로드 (JDK 1.1 applet viewer 사용의 경우 스윙 JAR 파일로드 )

브라우저로 html 파일을 연다 HelloSwingApplet.htmlHelloSwingApplet.html

소스코드 : HelloSwingApplet.java Html 파일에 applet 끼워 넣는 코드

<<APPLET CODE = "HelloSwingApplet.class" CODEBASE = "example-swing" APPLET CODE = "HelloSwingApplet.class" CODEBASE = "example-swing"

ARCHIVE = "applets.jar" WIDTH = 400 HEIGHT = 50 > ARCHIVE = "applets.jar" WIDTH = 400 HEIGHT = 50 >

<PARAM NAME = CODE VALUE = "HelloSwingApplet.class" > <PARAM NAME = CODE VALUE = "HelloSwingApplet.class" >

<PARAM NAME = CODEBASE VALUE = "example-swing" > <PARAM NAME = CODEBASE VALUE = "example-swing" >

<PARAM NAME = ARCHIVE VALUE = "applets.jar" > <PARAM NAME = ARCHIVE VALUE = "applets.jar" >

<PARAM NAME="type" VALUE="application/x-java-applet;version=1.1.2"><PARAM NAME="type" VALUE="application/x-java-applet;version=1.1.2">

</APPLET></APPLET>

Page 12: THE JFC SWING A Guide to  Constructing GUIs (Introduction)

12Data Warehousing

Lab.DW

4. 스윙 애플리케이션의 코드 맛보기 SwingApplication.javaSwingApplication.java

import javax.swing.*; import java.awt.*;import java.awt.event.*;

public class SwingApplication { private static String labelPrefix = "Number of button clicks: "; private int numClicks = 0;

public Component createComponents() { final JLabel label = new JLabel(labelPrefix + "0 ");

JButton button = new JButton("I'm a Swing button!"); button.setMnemonic(KeyEvent.VK_I); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { numClicks++; label.setText(labelPrefix + numClicks); } }); label.setLabelFor(button); JPanel pane = new JPanel(); pane.setBorder(BorderFactory.createEmptyBorder( 30, 30, 10, 30) ); pane.setLayout(new GridLayout(0, 1)); pane.add(button); pane.add(label); return pane; }

public static void main(String[] args) { try { UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName()); } catch (Exception e) { }

//Create the top-level container and add contents to it. JFrame frame = new JFrame("SwingApplication"); SwingApplication app = new SwingApplication(); Component contents = app.createComponents(); frame.getContentPane().add(contents, BorderLayout.CENTER);

//Finish setting up the frame, and show it. frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.pack(); frame.setVisible(true); }}

스윙팩키지도입

외양선택

최상위컨테이너 설정하고 보여주기

버튼설정

레이블 설정

컴포넌트추가 이벤트처리

Page 13: THE JFC SWING A Guide to  Constructing GUIs (Introduction)

13Data Warehousing

Lab.DW

4. 스윙 애플리케이션의 코드 맛보기 SwingApplication.javaSwingApplication.java

외양의 선택 UIManager.setLookAndFeel(UIManager.setLookAndFeel(

"com.sun.java.swing.plaf.windows.WindowsLook"com.sun.java.swing.plaf.windows.WindowsLookAndFeel“AndFeel“ ); );

setLookAndFeel argumentssetLookAndFeel arguments UIManager.getCrossPlatformLookAndFeelClassName() UIManager.getSystemLookAndFeelClassName() "javax.swing.plaf.metal.MetalLookAndFeel“ "com.sun.java.swing.plaf.windows.WindowsLookAndFe

el“ "com.sun.java.swing.plaf.motif.MotifLookAndFeel“ "javax.swing.plaf.mac.MacLookAndFeel"

스레드 관련 문제 보조적 기술들의 지원

label.setLabelFor(button);label.setLabelFor(button);

JButton button = new JButton("I'm a Swing button!");

label = new JLabel(labelPrefix + "0 ");

label.setText(labelPrefix + numClicks);

JFrame frame = new JFrame("SwingApplication");

Page 14: THE JFC SWING A Guide to  Constructing GUIs (Introduction)

14Data Warehousing

Lab.DW

Swing Features and Concepts

5. 5. 컴포넌트와 컨테이너의 계통적 구조컴포넌트와 컨테이너의 계통적 구조 6. 6. 레이아웃 관리레이아웃 관리 7. 7. 이벤트 처리이벤트 처리 8. 8. 페인팅페인팅 9. 9. 스레드와 스윙스레드와 스윙 10. 10. 그 외의 스윙 기능들과 개념들그 외의 스윙 기능들과 개념들 11. 11. 스윙 기반 프로그램의 분석스윙 기반 프로그램의 분석

Page 15: THE JFC SWING A Guide to  Constructing GUIs (Introduction)

15Data Warehousing

Lab.DW

5. 컴포넌트와 컨테이너의 계통적 구조 SwingApplication.javaSwingApplication.java

스윙컴포넌트 프레임 또는 메인 윈도우프레임 또는 메인 윈도우 ((Jframe)Jframe) 패널패널 ((Jpane)Jpane) 버튼버튼 ((Jbutton)Jbutton) 레이블레이블 ((Jlabel)Jlabel)

[containment hierarchy]

Page 16: THE JFC SWING A Guide to  Constructing GUIs (Introduction)

16Data Warehousing

Lab.DW

6. 레이아웃 관리 레이아웃 관리레이아웃 관리

컴포넌트들의 크기와 위치를 결정하는 과정 레이아웃 관리자레이아웃 관리자

컨테이너에 담긴 컴포넌트들에 대해 레이아웃 관리를 수행하는 객체

레이아웃 관리자 설정레이아웃 관리자 설정 JPanel pane = new JPanel();

pane.setLayout(new BorderLayout()); 절대위치방식 : 레이아웃 속성을 null 로 지정

컴포넌트에 대한 정보제공컴포넌트에 대한 정보제공 크기 :

setMinimumSize, setPreferredSize, setMaximumSize setMinimumSize, setPreferredSize, setMaximumSize

getMinimumSize, getPreferredSize, getMaximumSize getMinimumSize, getPreferredSize, getMaximumSize

정렬 :setAlignmentX , setAlignmentY setAlignmentX , setAlignmentY

getAlignmentX , getAlignmentYgetAlignmentX , getAlignmentY

Page 17: THE JFC SWING A Guide to  Constructing GUIs (Introduction)

17Data Warehousing

Lab.DW

6. 레이아웃 관리 다양한 레이아웃 관리자다양한 레이아웃 관리자

1. BorderLayout

2. BoxLayout

3. CardLayout

4. FlowLayout

5. GridLayout

6. GridBagLayout

Page 18: THE JFC SWING A Guide to  Constructing GUIs (Introduction)

18Data Warehousing

Lab.DW

6. 레이아웃 관리 레이아웃 관리가 일어나는 방식레이아웃 관리가 일어나는 방식

GUI 가 만들어지고 나면 , JFrame 에서 pack메서드가 호출된다 .

프레임의 레이아웃 관리자가 프레임의 적정 크기를 찾기 위해 프레임의 경계 크기에 프레임이 직접 담고 있는 컴포넌트의 적정 크기를 더한다 .

내용창의 레이아웃 관리자가 내용창의 적정 크기를 구한다 .

레이아웃 관리자가 크기를 물으면 , 각 버튼은 우선 사용자가 적정 크기를 지정했는지 점검한다 .

크기 결정 순서 포함관계 계통구조의 하위 컴포넌트 포함관계 계통구조의 하위 컴포넌트 -> -> 상위 컨테이너상위 컨테이너

Page 19: THE JFC SWING A Guide to  Constructing GUIs (Introduction)

19Data Warehousing

Lab.DW

7. 이벤트 처리 이벤트이벤트

이벤트에 대한 정보를 제공하고 이벤트 출처에 통지를 하나의 객체

이벤트의 요소 인터페이스 구현인터페이스 구현 이벤트 출처이벤트 출처 (( 객체객체 )) 에 이벤트 리스너 등록에 이벤트 리스너 등록

이벤트 출처와 이벤트 리스너

event object ----> event listenerevent listener source ----> event listener ----> event listener

Page 20: THE JFC SWING A Guide to  Constructing GUIs (Introduction)

20Data Warehousing

Lab.DW

7. 이벤트 처리 이벤트 처리부 구현이벤트 처리부 구현

이벤트 처리부 (event handler) 클래스의 요소 리스너 인터페이스 구현리스너 인터페이스 구현 ((Implement) Implement) 또는 다른 클래스 확장또는 다른 클래스 확장

((expands)expands) 할 것인지 지정 코드할 것인지 지정 코드 public class MyClass implements ActionListener { public class MyClass implements ActionListener { 인스턴스 등록 코드인스턴스 등록 코드

someComponent.addActionListener(instanceOfMyClass); someComponent.addActionListener(instanceOfMyClass); 리스너 인터페이스의 메서드들을 구현하는 코드 리스너 인터페이스의 메서드들을 구현하는 코드

public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) { ...//code ...//code that reacts to the action...that reacts to the action... } }

스레드와 이벤트처리스레드와 이벤트처리 이벤트 처리 코드는 하나의 스레드 즉 , event dispatching

thread 안에서 실행된다 .

ActionEvent

button -----------------------> action listener

Page 21: THE JFC SWING A Guide to  Constructing GUIs (Introduction)

21Data Warehousing

Lab.DW

8. 페인팅 페인팅의 작동방식페인팅의 작동방식

AWT 페인팅 시스템 스윙 스윙 GUIGUI 가 자신을 다시 그릴 필요가 생기는 경우 가 자신을 다시 그릴 필요가 생기는 경우

과정조절과정조절

스윙 리페인트 관리자 컴포넌트를 명시적으로 다시 그려지게 한다컴포넌트를 명시적으로 다시 그려지게 한다 .. 컴포넌트의 크기나 위치가 자동 재조정되지 않는 경우 컴포넌트의 크기나 위치가 자동 재조정되지 않는 경우

repaint repaint 이전에 이전에 revalidaterevalidate 호출해야 한다호출해야 한다 ..

더블 버퍼링 화면을 부드럽게 갱신하기위해화면을 부드럽게 갱신하기위해 , , 메모리 상의 버퍼에서 메모리 상의 버퍼에서

페인팅 작업후페인팅 작업후 , , 모두 그려지면 화면에 뿌리는 방식모두 그려지면 화면에 뿌리는 방식

페인팅순서 (SwingApplicaiton.java) 최상위 컨테이너 최상위 컨테이너 -> -> 하위 컴포넌트하위 컴포넌트

ex.SwingApplication.java

Jframe-> 내용창 ->Jpanel->Jbutton,JLabel

Page 22: THE JFC SWING A Guide to  Constructing GUIs (Introduction)

22Data Warehousing

Lab.DW

9. 스레드와 스윙 단일 스레드 규칙단일 스레드 규칙

스윙 컴포넌트들은 한 시점에서 단 하나의 스레드 , event dispatching 로부터만 접근 되어야한다 . 한 스윙 컴포넌트가 실현된 후에는 그 컴포넌트의 상태에 영향을 한 스윙 컴포넌트가 실현된 후에는 그 컴포넌트의 상태에 영향을

주거나 상태에 의존하는 모든 코드는 반드시 이벤트 발송 스레드 주거나 상태에 의존하는 모든 코드는 반드시 이벤트 발송 스레드 안에서 실행되어야한다안에서 실행되어야한다 ..

단일 스레드 규칙의 예외 일부메서드들은 스레드에 안전하다일부메서드들은 스레드에 안전하다

This method is thread safe, although most Swing methods are not. This method is thread safe, although most Swing methods are not. Please see Threads and Swing for more information. Please see Threads and Swing for more information.

애플리케이션의 애플리케이션의 GUIGUI 는 메인 스레드에서 생성는 메인 스레드에서 생성 , , 표시되기도한다표시되기도한다 .. 애플릿의 애플릿의 GUIGUI 는 는 initinit 메서드 안에서 생성 표시될 수 있다메서드 안에서 생성 표시될 수 있다 .. JcomponentJcomponent 의 메서드들 중 의 메서드들 중 repairrepair 와 와 revalidaterevalidate 는 어떤 는 어떤

스레드에서 호출해도 안전하다스레드에서 호출해도 안전하다 .. 리스너 목록들은 어떤 스레드에서도 수정할 수 있다리스너 목록들은 어떤 스레드에서도 수정할 수 있다 ..

addListenerTypeListener, removeListenerTpyeListeneraddListenerTypeListener, removeListenerTpyeListener

이벤트 발송 스레드가 아닌 형태로 GUI 작업수행의 경우 실제 작업 이전에 시간이 오래 걸리는 초기화 작업을 수행하는 실제 작업 이전에 시간이 오래 걸리는 초기화 작업을 수행하는

프로그램프로그램 비표준적인 이벤트의 결과로 갱신되는 비표준적인 이벤트의 결과로 갱신되는 GUIGUI 를 사용하는 프로그램를 사용하는 프로그램

Page 23: THE JFC SWING A Guide to  Constructing GUIs (Introduction)

23Data Warehousing

Lab.DW

10. 그외의 스윙 기능들과 개념들 JcomponetJcomponet 가 제공하는 기능들가 제공하는 기능들

J로 시작하는 컴포넌트는 최상위 컨테이너를 제외하고 모두 JComponent 클래스로부터 상속

아이콘아이콘 버튼 , 레이블에 이미지 표시

액션액션 액션 이벤트를 발생시킨 둘 또는 그이상의 컴포넌트들 사이에

데이터 공유 교체가능한 외양교체가능한 외양

여러가지 Look & Feel 을 사용자가 선택하거나 , 프로그램 안에서 지정

보조적 기술의 지원보조적 기술의 지원 Accessbility API 를 이용 - 스윙 컴포넌트 정보 획득

데이터와 상태 모델의 분리데이터와 상태 모델의 분리 컴포넌트들을 좀더 효율적으로 다루고 컴포넌트 사이에서

데이터와 상태를 쉽게 공유하게 함 . (ex.ButtonModel)

Page 24: THE JFC SWING A Guide to  Constructing GUIs (Introduction)

24Data Warehousing

Lab.DW

11. 스윙 기반 프로그램의 분석 Converter.java Converter.java

미터법 단위와 U.S 단위 ( 인치 , 피트 , 야드 등 ) 사이에서 길이를 변환하는 프로그램

컴포넌트들 Jframe Jframe 한 개한 개 커스텀 커스텀 Jpane 2Jpane 2 개개 커스텀 커스텀 JTextField 2JTextField 2 개개 JSlider 2JSlider 2 개개 JComboBox 2JComboBox 2 개개

레이아웃 관리자 Gridlayout 1Gridlayout 1 개개 Boxlayout 4Boxlayout 4 개개

분리된 모델 텍스트 필드 위한 데이터 모델 텍스트 필드 위한 데이터 모델 11 개개 슬라이더의 데이터 모델 슬라이더의 데이터 모델 22 개개

이벤트처리 액션리스너액션리스너 변경리스너변경리스너 윈도우리스너윈도우리스너