Java Swing으로 데스크톱 애플리케이션을 개발할 때 가장 많이 사용하는 두 가지 창 컴포넌트가 바로 JFrame과 JDialog입니다. 두 클래스는 비슷해 보이지만 용도와 동작 방식에서 중요한 차이가 있습니다. 이 글에서는 각각의 특징과 예제 코드를 통해 두 컴포넌트의 차이점을 명확하게 살펴보겠습니다.
JFrame이란?
- 프레임에 추가되는 컴포넌트들은 '콘텐츠(contents)'라고 부르며, 이들은 contentPane이 관리합니다. 따라서 JFrame에 컴포넌트를 추가하려면 프레임에 직접 추가하지 않고 반드시 contentPane을 통해야 합니다.
- JFrame은 제목(title), 테두리(border), 선택적으로 메뉴 바(menu bar), 그리고 사용자가 지정한 컴포넌트들로 구성된 하나의 윈도우를 나타냅니다.
- JFrame은 이동, 크기 조절, 아이콘화(최소화)가 가능하며, JComponent의 하위 클래스가 아니라는 점도 특징입니다.
- 기본적으로 JFrame은 화면의 왼쪽 상단에 표시됩니다. 원하는 위치에 프레임을 띄우려면 JFrame 클래스의 setLocation(x, y) 메서드를 사용하면 됩니다.
예제 코드
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JFrameDemo {
public static void main(String s[]) {
JFrame frame = new JFrame("JFrame Demo");
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
JLabel lbl = new JLabel("JFrame Demo");
lbl.setPreferredSize(new Dimension(175, 100));
frame.getContentPane().add(lbl, BorderLayout.CENTER);
frame.setSize(375, 275);
frame.setVisible(true);
}
}
실행 결과

JDialog란?
- JDialog는 JFrame과 매우 유사하지만, 모달(modal) 방식으로 설정할 수 있다는 점이 결정적인 차이입니다. 모달이란 해당 JDialog가 화면에 표시되어 있는 동안에는 다른 어떤 창도 사용하거나 활성화할 수 없음을 의미합니다.
- 모달 다이얼로그는 다른 최상위(top-level) 윈도우로의 입력을 차단하는 반면, 비모달(modeless) 다이얼로그는 다른 창으로의 입력을 허용합니다.
- JFrame과 달리 JDialog는 창 오른쪽 상단에 최소화 및 최대화 버튼이 없습니다.
예제 코드
import javax.swing.JDialog;
import javax.swing.JLabel;
public class JDialogDemo extends JDialog {
public static void main(String[] args) {
try {
JDialogDemo dialog = new JDialogDemo();
dialog.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
public JDialogDemo() {
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
setTitle("Welcome to Tutorials Point");
setBounds(100, 100, 359, 174);
getContentPane().setLayout(null);
JLabel label = new JLabel("Welcome to Tutorials Point");
label.setBounds(86, 37, 175, 29);
getContentPane().add(label);
}
}
실행 결과

정리: 언제 무엇을 사용해야 할까?
애플리케이션의 메인 창처럼 독립적으로 동작해야 하는 화면이라면 JFrame이 적합합니다. 반면, 사용자의 확인이나 입력을 받은 후 닫히는 팝업 창, 알림창, 설정 창 등에는 JDialog를 사용하는 것이 좋습니다. 특히 작업 흐름상 다른 창의 조작을 잠시 막아야 하는 상황이라면 모달 JDialog가 가장 효과적인 선택입니다.