1. 다이얼로그
▷ 주 윈도우에서 사용자의 선택 또는 입력을 위해서 띄우는 서브 윈도우이다.
▷ 다이얼로그를 띄우는 주 윈도우를 부모 윈도우 또는 소유자 윈도우라고 한다.
▷ 모달 다이얼로그 : 다이얼로그를 닫기 전까지 부모 윈도우를 사용할 수 없는 다이얼로그
▷ 모달리스 다이얼로그 : 부모 윈도우를 계속 사용할 수 있는 다이얼로그
▷ 다이얼로그의 기본은 모달(JDialog)을 제공, 프로그램에서 자주 사용되는 표준화된 다이얼로그도 제공
▷ 다이얼로그를 띄울 때는 소유자 윈도우(JWindow, JFrame, JDialog 등)가 반드시 필요
(1) 사용자 정의 다이얼로그
▷ 사용자 정의 다이얼로그를 만들기 위해서는 JDialog를 상속해야 한다.
▷ 생성자는 소유자 윈도우를 받도록 선언, 소유자 윈도우를 JDialog 생성자에게 넘겨주기 위해 super(owner)를 호출
▷ JDialog는 JFrame과 마찬가지로 우측 상단에 종료 버튼 [×]를 제공, 기본 기능은 JDialog를 화면에서 숨김
▷ JDialog를 완전히 제거하고 싶다면 setDefaultCloseOperation(JDialog. DISPOSE_ON_CLOSE)를 호출
◎ 종료 버튼에 적용할 수 있는 기능
NO | 기능별 상수 | 설명 |
1 | WindowConstants.DO_NOTHING_ON_CLOSE | 아무 것도 하지 않음 |
2 | WindowConstants.HIDE_ON_CLOSE | 화면에서 JDialog 숨김(기본) |
3 | WindowConstants.DISPOSE_ON_CLOSE | 화면에서 JDialog 완전히 제거 |
int left = owner.getLocationOnScreen().x + (owner.getWidth()-dialog.getWidth())/2;
int top = owner.getLocationOnScreen().y + (owner.getHeight()-dialog.getHeight())/2;
◎ 다이얼로그 띄우기 클릭시 모달 다이어로그 나타남 예([닫기] 클릭시 사라지게 함)
1. JDialogExample 다이얼로그
import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.WindowConstants; public class JDialogExample extends JDialog { private JButton btnClose; // 다이얼로그 설정 public JDialogExample(JFrame owner) { super(owner); this.setTitle("JDialogExample"); this.setSize(300, 200); this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); this.setResizable(false); this.setModal(true); this.setLocation( owner.getLocationOnScreen().x + (owner.getWidth() - this.getWidth())/2, owner.getLocationOnScreen().y + (owner.getHeight() - this.getHeight())/2 ); this.getContentPane().add(getBtnClose(), BorderLayout.SOUTH); } // 남쪽 버튼 생성 public JButton getBtnClose() { if(btnClose == null) { btnClose = new JButton(); btnClose.setText("닫기"); btnClose.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JDialogExample.this.dispose(); } }); } return btnClose; } }
2. JFrameExample 프레임
import java.awt.BorderLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class JFrameExample extends JFrame { private JButton btnOpenDialog; // 메인 윈도우 설정 public JFrameExample() { this.setTitle("JFrame"); this.setSize(500, 400); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.getContentPane().add(getBtnOpenDialog(), BorderLayout.SOUTH); } // 남쪽 버튼 생성 public JButton getBtnOpenDialog() { if(btnOpenDialog == null) { btnOpenDialog = new JButton(); btnOpenDialog.setText("다이얼로그 띄우기"); btnOpenDialog.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { // 다이얼로그 띄우기 JDialogExample jDialog = new JDialogExample(JFrameExample.this); jDialog.setVisible(true); } }); } return btnOpenDialog; } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { JFrameExample jFrame = new JFrameExample(); jFrame.setVisible(true); } }); } }
다이얼로그 창을 띄우면 프레임 창은 선택할 수 없게됩니다.
JDialog를 이용하면 새로운 창을 생성할 수 있습니다. 대신 호출했던 부모창은 비활성화되어서 다이얼로그 창을 닫아야만 부모창을 선택할 수 있게됩니다.
다이얼로그는 새로운 창을 이용할 수 있지만 부모창을 사용할 수 없다는 것을 고려해야겠네요!
더 많은 기능들에 대해서 배워볼게요~!!
많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

'BackEnd > Java' 카테고리의 다른 글
[java]이것이 자바다 부록 Java UI 12-2 (Swing을 이용한 파일 다이얼로그) (0) | 2023.02.21 |
---|---|
[java]이것이 자바다 부록 Java UI 12-1 (Swing을 이용한 표준화된 다이얼로그) (1) | 2023.02.21 |
[java]이것이 자바다 부록 Java UI 11 (Swing을 이용한 툴바 컴포넌트) (0) | 2023.02.20 |
[java]이것이 자바다 부록 Java UI 10 (Swing을 이용한 메뉴 컴포넌트) (0) | 2023.02.20 |
[java]이것이 자바다 부록 Java UI 9 (Swing을 이용한 트리 컴포넌트) (0) | 2023.02.19 |