본문 바로가기

BackEnd/Java

[java]이것이 자바다 부록 Java UI 12-1 (Swing을 이용한 표준화된 다이얼로그)

728x90

(2) 표준화된 다이얼로그

   ▷ Swing은 자주 사용되는 표준화된 다이얼로그(MessageDialog, ConfirmDialog, InputDialog, OptionDialog)를 쉽게 생성하기 위해 JOptionPane 클래스를 제공한다.

 

◎ JOptionPane의 메소드

NO 메소드 다이얼로그 다이얼로그 모양
1 showMessageDialog( … ) 텍스트 메시지[확인]
2 showConfirmDialog( … ) 텍스트 메시지[확인][취소]
[예][아니오][취소]
[예][아니오]
3 showInputDialog( … ) 입력 컴포넌트 [확인] [취소]
4 showOptionDialog( … ) 텍스트 메시지
[사용자 정의 버튼]

 

◎ showXXXDialog() 메소드의 매개변수

NO 매개변수 설명 값의 종류
1 Component parentComponent 소유자 윈도우 또는 null
(소유자 윈도우의 중앙에 위치,
null을 주면 스크린 중앙에 위치)
JWindow,
JFrame,
JDialog
2 Object message 텍스트 메시지 String
3 String title 다이얼로그 제목 String
4 int optionType 버튼 집합 결정
JOptionPane의 상수 이용
OK_CANCEL_OPTION
YES_NO_OPTION
YES_NO_CANCEL_OPTION
5 int messageType 표준 아이콘 설정
JOptionPane의 상수 이용
PLAIN_MESSAGE
INFORMATION_MESSAGE
QUESTION_MESSAGE
WARNING_MESSAGE
ERROR_MESSAGE
6 Icon icon 사용자 정의 아이콘 설정 ImageIcon
7 Object[] selectionValues InputDialog에서 사용됨.
항목이 12 개 미만이면 JComboBox,
항목이 12개 이상이면 JList가 사용됨.
String[]
Icon[]
8 Object initialSelectionValue InputDialog에서 초기 선택값 String, Icon
9 Object[] options OptionDialog의 버튼들에 표시되는
텍스트 또는 이미지
String[]
Icon[]
10 Object initialValue 초기 포커스를 갖는 버튼의
텍스트 또는 이미지
String
Icon

 

   ▷ showMessageDialog() 메소드를 제외하고 나머지 세 개의 showXXXDialog() 메소드는 모두 리턴값이 있음

      ▶ 리턴값은 어떤 버튼이 클릭되었는지, 입력된 값이 무엇인지에 대한 정보를 담고 있음

 

① ConfirmDialog는 어떤 버튼이 클릭되었는가가 중요하기 때문에 showConfirmDialog() 메소드는 클릭된 버튼에 해당하는 int 타입의 JOptionPane 상수를 리턴

NO JOptionPane 상수 설명
1 JOptionPane.OK_OPTION [확인] 버튼을 눌렀을 때
2 JOptionPane.CANCEL_OPTION [취소] 버튼을 눌렀을 때
3 JOptionPane.YES_OPTION [예] 버튼을 눌렀을 때
4 JOptionPane.NO_OPTION [아니오] 버튼을 눌렀을 때
5 JOptionPane.CLOSED_OPTION 우측 상단의 [×] 버튼을 눌렀을 때

 

② InputDialog는 입력된 값이 중요하기 때문에 showInputDialog() 메소드는 입력 컴포넌 트가 JTextField이면 String을 리턴하고, JList나 JComboBox라면 선택된 Object를 리턴 한다.

 

③ OptionDialog는 어떤 버튼이 클릭되었는지가 중요하기 때문에 showOptionDialog() 메 소드는 매개값으로 주어진 options 배열에서 클릭된 버튼의 인덱스를 리턴한다.

 

◎ 표준 다이얼로그 생성 및 메소드 리턴값 이용 예제

import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; public class JOptionPaneExample extends JFrame { ​​​​private JButton btnMessage, btnConfirm; ​​​​private JButton btnInput, btnOption; ​​​​ ​​​​// 메인 윈도우 설정 ​​​​public JOptionPaneExample() { ​​​​​​​​this.setTitle("JOptionPaneExample"); ​​​​​​​​this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ​​​​​​​​this.getContentPane().setLayout(new GridLayout(4,1)); ​​​​​​​​this.getContentPane().add(getBtnMessage()); ​​​​​​​​this.getContentPane().add(getBtnConfirm()); ​​​​​​​​this.getContentPane().add(getBtnInput()); ​​​​​​​​this.getContentPane().add(getBtnOption()); ​​​​​​​​this.setSize(500, 300); ​​​​} ​​​​ ​​​​// MessageDialog를 보여주는 버튼 생성 ​​​​public JButton getBtnMessage() { ​​​​​​​​if(btnMessage == null) { ​​​​​​​​​​​​btnMessage = new JButton(); ​​​​​​​​​​​​btnMessage.setText("MessageDialog"); ​​​​​​​​​​​​btnMessage.addActionListener(new ActionListener() { ​​​​​​​​​​​​​​​​public void actionPerformed(ActionEvent e) { ​​​​​​​​​​​​​​​​​​​​// MessageDialog를 보여줌 ​​​​​​​​​​​​​​​​​​​​JOptionPane.showMessageDialog( ​​​​​​​​​​​​​​​​​​​​​​​​JOptionPaneExample.this, ​​​​​​​​​​​​​​​​​​​​​​​​"다이얼로그 텍스트 내용", ​​​​​​​​​​​​​​​​​​​​​​​​"INFORMATION_MESSAGE", ​​​​​​​​​​​​​​​​​​​​​​​​JOptionPane.INFORMATION_MESSAGE); ​​​​​​​​​​​​​​​​} ​​​​​​​​​​​​}); ​​​​​​​​} ​​​​​​​​return btnMessage; ​​​​} ​​​​ ​​​​// ConfirmDialog를 보여주는 버튼 생성 ​​​​public JButton getBtnConfirm() { ​​​​​​​​if(btnConfirm == null) { ​​​​​​​​​​​​btnConfirm = new JButton(); ​​​​​​​​​​​​btnConfirm.setText("ConfirmDialog"); ​​​​​​​​​​​​btnConfirm.addActionListener(new ActionListener() { ​​​​​​​​​​​​​​​​public void actionPerformed(ActionEvent e) { ​​​​​​​​​​​​​​​​​​​​// ConfirmDialog를 보여줌 ​​​​​​​​​​​​​​​​​​​​int option = JOptionPane.showConfirmDialog( ​​​​​​​​​​​​​​​​​​​​​​​​JOptionPaneExample.this, ​​​​​​​​​​​​​​​​​​​​​​​​"다이얼로그 텍스트 내용", ​​​​​​​​​​​​​​​​​​​​​​​​"OK_CANCEL_OPTION", ​​​​​​​​​​​​​​​​​​​​​​​​JOptionPane.OK_CANCEL_OPTION, ​​​​​​​​​​​​​​​​​​​​​​​​JOptionPane.PLAIN_MESSAGE, ​​​​​​​​​​​​​​​​​​​​​​​​null); ​​​​​​​​​​​​​​​​​​​​// 클릭된 버튼 확인하기 ​​​​​​​​​​​​​​​​​​​​if(option == JOptionPane.OK_OPTION) { ​​​​​​​​​​​​​​​​​​​​​​​​System.out.println("확인 버튼을 눌렀군요"); ​​​​​​​​​​​​​​​​​​​​} else if(option == JOptionPane.CANCEL_OPTION) { ​​​​​​​​​​​​​​​​​​​​​​​​System.out.println("취소 버튼을 눌렀군요"); ​​​​​​​​​​​​​​​​​​​​} else if(option == JOptionPane.CLOSED_OPTION) { ​​​​​​​​​​​​​​​​​​​​​​​​System.out.println("닫기 버튼을 눌렀군요"); ​​​​​​​​​​​​​​​​​​​​} ​​​​​​​​​​​​​​​​} ​​​​​​​​​​​​}); ​​​​​​​​} ​​​​​​​​return btnConfirm; ​​​​} ​​​​ ​​​​// InputDialog를 보여주는 버튼 생성 ​​​​public JButton getBtnInput() { ​​​​​​​​if(btnInput == null) { ​​​​​​​​​​​​btnInput = new JButton(); ​​​​​​​​​​​​btnInput.setText("InputDialog"); ​​​​​​​​​​​​btnInput.addActionListener(new ActionListener() { ​​​​​​​​​​​​​​​​public void actionPerformed(ActionEvent e) { ​​​​​​​​​​​​​​​​​​​​String input = null; ​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​// 텍스트 입력을 받는 InputDialog를 보여줌 ​​​​​​​​​​​​​​​​​​​​input = JOptionPane.showInputDialog( ​​​​​​​​​​​​​​​​​​​​​​​​JOptionPaneExample.this, ​​​​​​​​​​​​​​​​​​​​​​​​"다이얼로그 텍스트 내용", ​​​​​​​​​​​​​​​​​​​​​​​​"InputDialog", ​​​​​​​​​​​​​​​​​​​​​​​​JOptionPane.INFORMATION_MESSAGE); ​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​// 선택된 항목을 출력 ​​​​​​​​​​​​​​​​​​​​System.out.println("입력된 텍스트: " + input); ​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​// JComboBox로 항목을 선택받는 InputDialog를 보여줌 ​​​​​​​​​​​​​​​​​​​​input = (String) JOptionPane.showInputDialog( ​​​​​​​​​​​​​​​​​​​​​​​​JOptionPaneExample.this, ​​​​​​​​​​​​​​​​​​​​​​​​"다이얼로그 텍스트 내용", ​​​​​​​​​​​​​​​​​​​​​​​​"InputDialog", ​​​​​​​​​​​​​​​​​​​​​​​​JOptionPane.PLAIN_MESSAGE, ​​​​​​​​​​​​​​​​​​​​​​​​null, ​​​​​​​​​​​​​​​​​​​​​​​​new String[] {"Java", "JDBC", "JSP", "Spring"}, "JDBC"); ​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​// 선택된 항목을 출력 ​​​​​​​​​​​​​​​​​​​​System.out.println("선택된 항목: " + input); ​​​​​​​​​​​​​​​​} ​​​​​​​​​​​​}); ​​​​​​​​} ​​​​​​​​return btnInput; ​​​​} ​​​​ ​​​​ ​​​​// OptionDialog를 보여주는 버튼 생성 ​​​​public JButton getBtnOption() { ​​​​​​​​if(btnOption == null) { ​​​​​​​​​​​​btnOption = new JButton(); ​​​​​​​​​​​​btnOption.setText("OptionDialog"); ​​​​​​​​​​​​btnOption.addActionListener(new ActionListener() { ​​​​​​​​​​​​​​​​public void actionPerformed(ActionEvent e) { ​​​​​​​​​​​​​​​​​​​​// OptionDialog를 보여줌 ​​​​​​​​​​​​​​​​​​​​int option = JOptionPane.showOptionDialog( ​​​​​​​​​​​​​​​​​​​​​​​​JOptionPaneExample.this, ​​​​​​​​​​​​​​​​​​​​​​​​"다이얼로그 텍스트 내용", ​​​​​​​​​​​​​​​​​​​​​​​​"OptionDialog", ​​​​​​​​​​​​​​​​​​​​​​​​JOptionPane.YES_NO_OPTION, ​​​​​​​​​​​​​​​​​​​​​​​​JOptionPane.INFORMATION_MESSAGE, ​​​​​​​​​​​​​​​​​​​​​​​​null, ​​​​​​​​​​​​​​​​​​​​​​​​new String[] {"시작","종료"}, "시작"); ​​​​​​​​​​​​​​​​​​​​// 클릭된 버튼 확인하기 ​​​​​​​​​​​​​​​​​​​​if(option == 0) { ​​​​​​​​​​​​​​​​​​​​​​​​System.out.println("시작 버튼을 눌렀군요"); ​​​​​​​​​​​​​​​​​​​​} else if(option == 1) { ​​​​​​​​​​​​​​​​​​​​​​​​System.out.println("종료 버튼을 눌렀군요"); ​​​​​​​​​​​​​​​​​​​​} ​​​​​​​​​​​​​​​​} ​​​​​​​​​​​​}); ​​​​​​​​} ​​​​​​​​return btnOption; ​​​​} ​​​​ ​​​​public static void main(String[] args) { ​​​​​​​​SwingUtilities.invokeLater(new Runnable() { ​​​​​​​​​​​​public void run() { ​​​​​​​​​​​​​​​​JOptionPaneExample jFrame = new JOptionPaneExample(); ​​​​​​​​​​​​​​​​jFrame.setVisible(true); ​​​​​​​​​​​​} ​​​​​​​​}); ​​​​} }

 


1. MessageDialog : 메시지 창 출력
2. ConfirmDialog : 메시지 창 출력
   ▷ OK 버튼 선택시 '확인 버튼을 눌렀군요' 출력
   ▷ Cancle 버튼 선택시 '취소 버튼을 눌렀군요' 출력
3. InputDialog : 텍스트 입력 창 출력
   ▷ 텍스트 입력시 '입력된 텍스트 : ???' 출력
   ▷ 이후 다이얼로그 텍스트 내용 선택하는 체크박스 선택
      ▶ OK 버튼 선택시 '선택된 항목 : JAVA' 출력
      ▶ Cancle 버튼 선택시 '선택된 항목 : null' 출력
4. OptionDialog : 메시지 창 출력
   ▷ 시작 버튼 선택시 '시작 버튼을 눌렀군요' 출력
   ▷ 종료 버튼 선택시 '종료 버튼을 눌렀군요' 출력

 

다이얼로그에서 JOptionPane의 메소드들은 다양한 메시지 창들을 표현할 수 있습니다.

 

다이얼로그를 잘 이용할 수 있는 방법들을 고민해봐야겠어요!

 

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

 

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

 

728x90