스윙 GUI 프로그램 만들기
스윙으로 GUI 응용프로그램을 만들기 위해서는 다음의 새 과정이 필요합니다.
- 스윙 프레임 작성
- main() 메소드 작성
- 프레임에 스윙 컴포넌트 붙이기
스윙 패키지 사용을 위한 import 문
스윙 패키지를 이용하기 위해서는 스윙 컴포넌트의 클래스 파일들이 존재하는 경로명 javax.swing.*를 import 해야 합니다.
import javax.swing.*;
대부분의 스윙 응용프로그램은 이벤트 처리, 이미지나 도형을 그리는 부분을 함수적으로 동반하므로, 다음과 같은 import 문이 필요한 경우가 많다.
import java.awt.*; // 폰트 등 그래픽 처리를 위한 클래스들의 경로명
import java.awt.event.*; // 이벤트 처리에 필요한 기본 클래스들의 경로명
import javax.swing.*; // 스윙 컴포넌트 클래스들의 경로명
import javax.swing.event.*; // 스윙 이벤트 처리에 필요한 클래스들의 경로명
스윙 프레임과 인텐트팬
스윙 프레임은 모든 스윙 컴포넌트들을 담는 최상위의 컨테이너(Top Level Container)입니다. 스윙 프레임 내에 부착된 모든 컴포넌트들이 화면에 출력됩니다. 컴포넌트들은 스윙 프레임 없이 독립적으로 화면에 출력될 수 없습니다. 스윙 프레임 닫히면 프레임 내의 모든 컴포넌트들도 프레임과 함께 화면에서 사라집니다.
스윙 프레임의 역할을 수행하는 클래스가 JFrame입니다. JFrame 객체는 Frame(java.awt.Frame), 메뉴바(Menu Bar), 컨텐트팬(Content Pane)의 3공간으로 구성됩니다. Frame은 AWT 패키지에 있는 클래스로서 JFrame이 상속빋기 때문에 당연히 그 속성들이 존재하며, 메뉴바는 메뉴들을 부찬하는 공간이고, 컨텐트팬은 메뉴를 만들어 Frame의 메뉴에 부착하는 공간입니다. 스윙 프로그램 개발자는 메뉴를 만들어 JFrame의 메뉴바에 부착하여야 하며, 화면에 출력하고자 하는 GUI 컴포넌트들은 모두 컨텐트팬에 부착하여야 합니다.
프레임 만들기, JFrame 클래스 상속
스윙 응용프로그램의 프레임은 JFrame을 상속받아 만들면 됩니다. 다음은 JFame을 상속받아 MyFrame 클래스를 만든 사례입니다.
public class MyFrame extends JFrame {
............................
}
MyFrame의 객체가 생성되면 스윙 프레임의 역할을 하게 됩니다. MyFrame 클래스에 main() 메소드를 두고, main()에서 다음과 같이 MyFrame의 객체를 생성하면 스윙 프로그램이 탄생합니다.
MyFrame frame = new MyFrame(); // 스윙 프레임 생성
프레임의 크기와 타이틀은 MyFrame() 생성자에서 다음과 같이 설정하면 됩니다.
setTitle("300x300 스윙 프레임 만들기"); // 프레임 타이틀 설정
setSize(300, 300); // 폭 300, 높이 300 크기로 프레임 크기 설정
setVisible(true); // 프레임이 출력되도록 지시, false의 경우 프레임이 숨겨짐
300x300 크기의 스윙 프레임 만들기
import javax.swing.*;
public class MyFrame extends JFrame {
public MyFrame() {
setTitle("300x300 스윙 프레임 만들기");
setSize(300, 300); // 프레임 만들기
setVisible(true); // 프레임 출력
}
public static void main(String[] args) {
MyFrame frame = new MyFrame();
}
}
실행 결과

스윙 응용프로그램에서 main() 메소드의 기능과 위치
스윙 응용프로그램에서 main()의 기능은 최소화하는 것이 좋습니다. main()에는 스윙 응용프로그램이 실행되는 시작점으로서 프레임을 생성하는 코드 정도만 만들고, 나머지 기능은 프레임 클래스에 작성하는 것이 좋습니다.
프레임에 컴포넌트 붙이기
타이틀 달기
프레임에 타이틀을 열기 위해서는 다음과 같이 super()를 이용하여 JFrame의 생성자를 호출하거나, JFrame 클래스의 setTitle() 메서드를 이용합니다.
public MyFrame() { // 생성자
super("타이틀 문자열"); // JFrame("타이틀 문자열") 생성자를 호출하여 타이틀 달기
setTitle("타이틀 쿤자열"); // 메소드를 호출하여 타이틀 달기
}
메뉴 붙이기
메뉴를 작성하기 위해서는 메뉴바를 만들고, 메뉴를 붙이고, 메뉴에는 여러 개의 메뉴 아이템을 붙입니다. 메뉴바를 JFrame의 메뉴바 영역에 븥이면 화면에 메뉴가 출력됩니다.
컨텐트팬에 컴포넌트 달기
스윙에서는 컨텐트팬(content pane)에만 컴포넌트를 부착할 수 있습니다. JFrame 객체가 생길 때 컨텐트팬이 자동으로 생성됩니다. 그러므로 현재 프레임에 붙어 있는 컨텐트맨을 알아내기 위해서는 다음과 같이 JFrame 클래스의 setContentPane() 메소드를 호출합니다. 컨텐트팬은 Container 타입입니다.
public class MyFrame extends JFrame {
public MyFrame() {
...
Container contentPane = getContentPane(); // 프레임에 부착된 컨텐트팬을 알아낸다.
}
...
}
컨텐트팬에 컴포넌트를 붙이는 것은 비교적 간단합니다. 컨텐트팬은 컨테이너이기 때문에 다음과 같이 add() 메서드를 이용하여 간단히 컴포넌트를 부착하면 됩니다.
JButton button = new JButton("Click"); // 버튼 컴포넌트 생성
ContentPane.add(button); // 컨텐트팬에 버튼 부착
컨텐트팬에 부착된 컴포넌트들은 프레임이 출력될 때 함께 화면에 출력됩니다.
컨텐트팬의 변경
JFrame 클래스의 setContentPane() 메서드를 이용하면 프레임에 부착된 컨텐트팬을 제거하고 새로운 컨텐트팬을 붙일 수 있습니다. 컨텐트팬은 Container 타입이므로 Container을 상속받은 어떤 컨테이너도 컨텐트팬이 될 수 있습니다.
class MyFrame1 extends JPanel {
// JPanel를 상속받은 패넣을 작성한다.
}
frame.setContentPane(new MyPanel()); // 프레임의 컨텐트 팬을 MyPanel 객체로 변경
3개의 버튼 컴포넌트을 가진 스윙 프래임 만들기
import javax.swing.*;
import java.awt.*;
public class ContentPanelEx extends JFrame {
public ContentPanelEx() {
setTitle("ContentPane과 JFrame"); // 프레인 타이틀 달기
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 프레임 윈도우를 닫으면 프로그램을 종료하도록 설정
Container contentPane = getContentPane(); // 컨텐트 팬을 알아낸다.
contentPane.setBackground(Color.orange); // 컨텐트팬의 색을 오렌지색으로
contentPane.setLayout(new FlowLayout()); // 컨텐트팬에 FlowLayout 배치관리자 달기
contentPane.add(new JButton("OK")); // OK 버튼 달기
contentPane.add(new JButton("Cancel")); // Cancel 버튼 달기
contentPane.add(new JButton("Ignore")); // ㅑgnore 버튼 달기
setSize(300, 150); // 프레임 크기 300x150 설정
setVisible(true); // 화면에 프레임 출력
}
public static void main(String[] args) {
new ContentPanelEx();
}
}
실행 결과

스윙 응용프로그램의 종료
자바에서 프로그램을 종료하려면 어떤 상황에서나 다음 코드를 사용하면 됩니다.
System.exit(0); // 자바 프로그램을 종료합니다.
프레임 윈도우가 닫힐 때 스윙 프로그램도 함께 종료시키고자 한다면 다음 코드를 삽입하여야 합니다.
Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 프레임이 닫힐 때 프로그램도 함께 종료한다.
main() 메소드가 종료한 뒤에도 프레임이 살아 있는 이유는 무엇인가?
main 스레드가 종료하더라도 이벤트 처리 스레드가 살아 있기 때문에, 자바 응용프로그램은 종료되지 않고 사용자로부터 키와 마우스 입력을 계속 처리하게 되는 것입니다.
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
| FlowLayout 배치관리자 (1) | 2025.05.21 |
|---|---|
| 컨테이너(Container)와 배치(Layout) (1) | 2025.05.20 |
| 자바 GUI 패키지 (1) | 2025.05.14 |
| 자바의 GUI (0) | 2025.05.11 |
| 파일 입출력 응용: 파일 복사 (1) | 2025.05.08 |