▶ 대화 상자
출처
- 대화 상자 윈도우는 프레임같은 주 윈도우와는 다르게 임시 정보를 나타내는 데 사용되는 독립적인 서브 윈도우이다.
- 주로 사용자에게 오류나 경고 또는 짧은 메시지를 전달하는 데 사용된다.
- 대화 상자는 프레임에 의존적이므로, 프레임이 삭제되면 대화 상자도 삭제된다. 또한 프레임이 아이콘화되면 대화 상자도 아이콘화된다. (AWT의 Dialog 클래스로부터 상속된 특성)
- 대화 상자의 종류는 크게 “모달형(Modal Dialog)”와 “비모달형(Non-Modal Dialog)”로 두 가지가 있다.
- 모달형(Modal Dialog) : 대화 상자를 끝내야만 다른 작업을 할 수 있다. ex) JOptionPane
- 비모달형(Non-Modal Dialog) : 대화상자를 끝내지 않고 다른 윈도우를 사용하여 작업할 수 있다. JDialog 클래스를 직접 사용하여야 한다. 또한 다이얼로그는 디폴트로 모달형이며, 모달형인지 지정하는 것은 다이얼로그의 setModal() 메소드를 사용하여 지정하거나 생성자에 지정할 수 있다.
- 아래는 대화 상자 객체의 종류이다.
- JOptionPane : 주로 표준화된 간단한 대화 상자
- ProgressMonitor : 진행 과정을 보여주는 간단한 대화 상자
- JColorChooser : 색상 선택기
- JFileChooser : 파일 선택기
- JDialog :맞춤형 대화 상자 즉, 커스터마이징이 가능하다.
▶ JOptionPane
- 쉽고 빠르게 간단한 대화 상자를 만들 때 주로 사용되는 클래스이다.
- 일반적인 대화 상자를 위한 아이콘 선택, 배치 관리, 제목 및 텍스트, 버튼의 텍스트를 변경할 수 있다.
- 제공하는 메소드는 showXXXDialog() 형태의 메소드명을 가지며, 대부분 간단한 모달형 대화상자를 생성하기 위해 사용된다.
showMessageDialog() : 버튼이 하나 있는 다이얼로그, 아래와 같이 세 가지 종류로 중복 정의되어있다.
[매개변수 설명]
JOptionPane.showMessageDialog(this, "Hi, This is Information message.", "정보", JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showMessageDialog(this, "Are you Okay?", "Question", JOptionPane.QUESTION_MESSAGE);
JOptionPane.showMessageDialog(this, "Hey! Watch Out", "경고", JOptionPane.WARNING_MESSAGE);
JOptionPane.showMessageDialog(this, "Not Access", "오류", JOptionPane.ERROR_MESSAGE);
[좌측의 아이콘이 messageType과 함께 바뀌는 것을 볼 수 있다.]
showOptionDialog() : 맞춤형 대화 상자로, 텍스트를 다르게 하거나 많은 버튼을 가질 수 있다. 또한 텍스트 메시지나 컴포넌트의 컬렉션을 포함할 수 있다.
[매개변수 설명]
JOptionPane.YES_NO_CANCEL_OPTION | 예, 아니오, 취소 3가지의 대답(선택지의 개수가 3개) |
JOptionPane.YES_NO_OPTION | 예, 아니오 2가지의 대답(선택지의 개수가 2개) |
JOptionPane.YES_OPTION | 예만 있는 1가지의 대답(선택지의 개수가 1개) |
String[] answer = {"First", "Second", "Third"};
int ans = JOptionPane.showOptionDialog(this, "What's your number?", "Number Check", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, null, answer, answer[0]);
//맨 마지막 매개변수로 answer[0]을 준 것은 리턴할 때의 초기값을 First로 하기 위함이다. null을 두어도 된다.
System.out.println("ans : " + ans); //인덱스번호(대답) 리턴 - First를 눌렀다면 0, Second면 1, Third면 2가 리턴된다.
showConfirmDialog() : 사용자로부터 다시 확인하고 싶은 경우에 사용된다.
int ans = JOptionPane.showConfirmDialog(this, "Are you sure?", "확인", JOptionPane.YES_NO_OPTION, JOptionPane.PLAIN_MESSAGE);
System.out.println("ans = " + ans); //예는 0, 아니오는 1을 리턴함
[messageType을 PLAIN_MESSAGE 로 지정하였기 때문에 아이콘이 나타나지 않는다.]
showInputDialog() : 사용자로부터 입력을 받고 싶은 경우에 사용된다. 총 6가지의 메소드가 중복 정의되어있다.
String ans_str = (String) JOptionPane.showInputDialog(this, "Write a word", "Input Dialog", JOptionPane.PLAIN_MESSAGE, null, null, null);
System.out.println("ans_str : " + ans_str); //입력한 단어가 리턴된다.
▶ JDialog
- 사용자 정의 대화 상자 : JOptionPane에서 제공하는 간단한 대화 상자 외에 제작자가 만들고 싶은 대화 상자가 있다면 JDialog 클래스를 상속(extends)함으로서 해결할 수 있다.
생성자 | JDialog(Frame parent) | 타이틀이 없는 다이얼로그를 생성한다. |
JDialog(Frame parent, boolean modal) | 타이틀이 없는 다이얼로그를 생성하고, 모달형 다이얼로그로 하고 싶으면 modal값에 true를, 비모달형 다이얼로그로 하고 싶으면 false를 매개변수로 넘겨주면 된다. | |
JDialog(Frame parent, String title) | 타이틀이 있는 다이얼로그를 생성한다. | |
JDialog(Frame parent, String title, boolean modal) | 타이틀, 모달유무가 설정된 다이얼로그를 생성한다. | |
메소드 | void show() | 다이얼로그를 띄운다. |
void setModal(boolean modal) | true로 지정하면 모달형이고, false이면 비모달형이다. | |
void setTitle(String title) | 다이얼로그의 타이틀을 설정한다. | |
boolean isModal() | 다이얼로그가 모달이면 true, 아니면 false를 반환한다. | |
String getTitle() | 다이얼로그의 타이틀을 반환한다. | |
boolean isResizable() | 크기를 변경할 수 있으면 true, 아니면 false를 반환한다. | |
void setResizable(boolean b) | 사용자가 크기를 변경할 수 있게 하려면 true, 변경할 수 없게 하려면 false를 지정하면 된다. |
-사용자 정의형 대화 상자 예제
public class ExamDialog extends JDialog implements ActionListener {
//FIELDS
private JPanel panel1, panel2;
private JLabel label;
private JButton okBtn;
private JButton cancelBtn;
//CONSTRUCTOR
ExamDialog(JFrame frame, String str) {
super(frame, str, true);
panel1 = new JPanel();
panel1.setLayout(new BorderLayout());
add(panel1);
label = new JLabel("Exam Dialog ~~ Good !", JLabel.CENTER);
panel1.add(label, BorderLayout.CENTER);
panel2 = new JPanel();
panel1.add(panel2, BorderLayout.SOUTH);
okBtn = new JButton("OK");
okBtn.addActionListener(this);
panel2.add(okBtn);
cancelBtn = new JButton("CANCEL");
cancelBtn.addActionListener(this);
panel2.add(cancelBtn);
setSize(300, 300);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
dispose(); //다이얼로그 제거
}
});
}
@Override
public void actionPerformed(ActionEvent e) {
dispose(); //다이얼로그 제거
}
}
public class Test extends JFrame implements ActionListener{
public static void main(String[] args) {
new Test();
}
//FIELDS
private JPanel panel;
private JButton btn1, btn2;
private ExamDialog examDialog;
Test() {
setTitle("DialogTest");
setSize(300, 300);
panel = new JPanel();
add(panel, "Center");
btn1 = new JButton("다이얼로그 열기");
btn2 = new JButton("나가기");
btn1.addActionListener(this);
btn2.addActionListener(this);
panel.add(btn1);
panel.add(btn2);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btn1) {
if (examDialog == null) {
examDialog = new ExamDialog(this, "Exam Dialog");
}
examDialog.setVisible(true);
btn1.requestFocus();
}else if (e.getSource() == btn2) {
System.exit(0);
}
}
}
[ "다이얼로그 열기" 버튼을 클릭하면 아래와 같은 다이얼로그 창이 뜬다.]
실 사용 예제
if(e.getSource() == JM.i10){
JOptionPane.showMessageDialog(B_Project.B_Project.jf, "Creator LSJ (010-2021-3627)");
}
if(e.getSource() == JM.i11){
int var = JOptionPane.showConfirmDialog(B_Project.B_Project.jf, "종료 하시겠습니까?", "????", JOptionPane.OK_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE, null);
if(var == 0){
System.exit(0);
}
}
좌측 부터 프레임, 메세지, 제목, 아이콘, 옵션;;
doc를 찾다 보니 알거 같다.
'소프트웨어 (과거) > 자바 GUI & C# 등...' 카테고리의 다른 글
15. 자바 프로그램 실행 방법 (0) | 2022.02.16 |
---|---|
14. 자바 JMenu 사용법 (0) | 2022.02.16 |
12. arrayList 사용법 (0) | 2022.02.15 |
11. 알면 편한 함수 (0) | 2022.02.07 |
10. 자바 로그 파일 생성 (0) | 2022.02.04 |