본문 바로가기

BackEnd/Java

[java]이것이 자바다 부록 Java UI 12 (Swing을 이용한 다이얼로그)

728x90
반응형

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를 이용하면 새로운 창을 생성할 수 있습니다. 대신 호출했던 부모창은 비활성화되어서 다이얼로그 창을 닫아야만 부모창을 선택할 수 있게됩니다.

 

다이얼로그는 새로운 창을 이용할 수 있지만 부모창을 사용할 수 없다는 것을 고려해야겠네요!

 

더 많은 기능들에 대해서 배워볼게요~!!

 

많은 분들의 피드백은 언제나 환영합니다!  많은 댓글 부탁드려요~~

 

728x90
반응형