JDialog란 무엇인가?
JDialog는 Java Swing에서 제공하는 Dialog 클래스의 하위 클래스입니다. 일반 프레임과 달리 창 오른쪽 상단에 최소화 및 최대화 버튼이 없다는 것이 특징입니다. Java에서는 JDialog를 두 가지 유형으로 만들 수 있습니다.
- 모달(Modal) 다이얼로그
- 논모달(Non-Modal) 다이얼로그
모달(Modal) JDialog
모달 다이얼로그가 화면에 표시되어 활성화되면, 모든 사용자 입력이 해당 다이얼로그로 집중됩니다. 따라서 사용자가 이 다이얼로그를 닫기 전까지는 애플리케이션의 다른 부분에 접근할 수 없습니다. 주로 확인 창, 경고 메시지, 필수 입력 폼 등 사용자의 응답이 반드시 필요한 경우에 활용됩니다.
논모달(Non-Modal) JDialog
반면 논모달 다이얼로그가 열려 있는 동안에도 애플리케이션의 다른 부분은 정상적으로 접근 가능하며, 입력 역시 자유롭게 전달할 수 있습니다. 즉, 논모달 다이얼로그를 굳이 닫지 않아도 되므로 도구 팔레트나 보조 정보 창처럼 애플리케이션과 동시에 사용해야 하는 UI에 적합합니다.
예제 코드
아래 예제는 하나의 JFrame 위에 모달 다이얼로그와 논모달 다이얼로그를 각각 생성하는 방법을 보여줍니다. ModalityType 옵션을 통해 다이얼로그의 성격을 지정할 수 있습니다.
import javax.swing.*;
import java.awt.*;
import java.awt.Dialog.ModalityType;
public class Modal_NonModal_Dialog {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setTitle("Modal and Non-Modal Dialog");
frame.setSize(350, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
// 논모달(non-modal) 다이얼로그 생성
JDialog nonModalDialog = new JDialog(frame, "Non-Modal Dialog", ModalityType.MODELESS);
nonModalDialog.setSize(300, 250);
nonModalDialog.setLocationRelativeTo(null);
nonModalDialog.setVisible(true);
// 모달(modal) 다이얼로그 생성
JDialog modalDialog = new JDialog(frame, "Modal Dialog", ModalityType.APPLICATION_MODAL);
modalDialog.setSize(300, 250);
modalDialog.setLocationRelativeTo(null);
modalDialog.setVisible(true);
}
}주요 코드 설명
- ModalityType.MODELESS: 논모달 다이얼로그를 의미하며, 다이얼로그가 열려 있어도 부모 프레임과 상호작용할 수 있습니다.
- ModalityType.APPLICATION_MODAL: 애플리케이션 단위 모달 다이얼로그로, 해당 다이얼로그가 닫히기 전까지 애플리케이션의 다른 창에는 입력할 수 없습니다.
실행 결과
프로그램을 실행하면 메인 프레임과 함께 두 개의 다이얼로그가 표시됩니다. 논모달 다이얼로그는 뒤에 있는 창을 클릭해 조작할 수 있지만, 모달 다이얼로그는 먼저 닫아야 다른 창을 사용할 수 있습니다.
