Swing 으로 만든 GUI 프로그램 샘풀 분석
swing 클래스의 특징
-
클래스 이름이 J 자로 시작
-
화려하고 다양한 컴포넌트로 쉽게 GUI 프로그래밍
(컴포넌트(Component)란 프로그래밍에 있어 재사용이 가능한 각각의 독립된 모듈)
=> 즉, 다시말해 컴포넌트(component)란 여러 개의 프로그램 함수들을 모아 하나의 특정한 기능을 수행할 수 있도록 구성한 작은 기능적 단위를 말합니다.
-
스윙 컴포넌트는 2가지 유형
- JComponent는 상속받는 클래스 (대부분의 스윙 컴포넌트)
- AWT의 Container를 상속받는 몇 개의 클래스 (JApplet, JDialog, JFrame 등)
-
JComponent
- 스윙 컴포넌트의 공통적인 속성을 구현한 추상 클래스
- AWT의 Component를 상속받음
-
컨테이너
- 다른 GUI 컴포넌트를 포함할 수 있는 컴포넌트
- java.awt.Container 상속
- 다른 컨테이너에 포함될 수 있음
- 종류들
- AWT 컨테이너 : Panel, Frame, Applet, Dialog, Window
- Swing 컨테이너 : JPanel, JFrame, JApplet, JDialog, JWindow
-
최상위 컨테이너
- 다른 컨테이너에 속하지 않고 독립적으로 출력가능한 컨테이너
// 오브젝트랑 같은 느낌인건가?? , 알아보기
-모든 컴포넌트는 컨테이너에 포함되어야 화면에 출력가능
- 컴포넌트
- 컨테이너에 포함되어야 화면에 출력될 수 있는 순수 컴포넌트
- 모든 컴포넌트는 java.awt.Component를 상속받음
- 모든 스윙 컴포넌트는 javax.swing.JComponent를 상속받음

스윙 패키지 사용을 위한 import 정리
- import java.awt.*; // 그래픽 처리를 위한 클래스들의 경로명
- import java.awt.event.*; // AWT 이벤트 사용을 위한 경로명
- import javax.swing.*; // 스윙 컴포넌트 클래스들의 경로명
- import javax.swing.event.*; //스윙 이벤트를 위한 경로명
스윙 프레임

- 모든 스윙 컴포넌트를 담는 최상위 GUI 컨테이너
- JFrame을 상속받아 구현
- 컴포넌트가 화면에 보이려면 스윙 프레임에 부착되어야 함
- 프레임을 닫으면 프레임 내의 모든 컴포넌트가 보이지 않게 됨
- 스윙 프레임(JFrame) 기본 구성
- 프레임 : 스윙 프로그램의 기본 틀
- 메뉴바 : 메뉴들이 부착되는 공간
- 컨텐트 팬 : GUI 컴포넌트들이 부착되는 공간

프레임에 컴포넌트 붙이기
3개의 버튼 컴포넌트를 가진 스윙프레임 만들기

- 응용프로그램 내에서 스스로 종료
System.exit(0);
- 언제 어디서나 무조건 종료
- 프레임 종료버튼(x)이 클릭되면 어떤 일이 일어나는가?
- 프레임을 종료하여 프레임 윈도우가 닫힘
- 프레임을 종료하여 프레임 윈도우가 닫힘
- 프레임이 보이지 않게 되지만 응용프로그램이 종료한 것 아님
- 키보드나 마우스 입력을 받지 못함
- 다시 setVisible(true)를 호출하면 보이게 되고 이전 처럼 작동함
- 프레임 종료버튼이 클릭될 때 프레임을 닫고 응용 프로그램이 종료하도록 하는 방법
frane.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
main() 종료 뒤에도 프레임이 살아 있는 이유?
- 스윙 프로그램이 실행되는 동안 생성되는 스레드
- 메인 스레드
-main()을 실행하는 스레드
-자바 응용프로그램의 실행을 시작한 스레드
- 이벤트 분배 스레드
- 스윙 응용프로그램이 실행될 때 자동으로 실행되는 스레드
- 이벤트 분배 스레드의 역할
- 프레임과 버튼 등 GUI 화면 그리기
- 키나 마우스 입력을 받아 이벤트를 처리할 코드 호출
- 자바 응용프로그램의 종료 조건
- 실행 중인 사용자 스레드가 하나도 없을 때 종료
- 스윙 프로그램 main() 종료 뒤 프레임이 살아있는 이유
- 메인 스레드가 종료되어도 이벤트 분배 스레드가 살아 있어 프레임 화면을 그리고 마우스나 키 입력을 받기 때문