Welcome to My World (www.dgmayor.com)

소프트웨어 (과거)/자바 GUI & C# 등...

13. 자바 대화 상자 여는 법 (JOptionPane, JDialog)

dgmayor 2022. 2. 15. 17:31
728x90

▶ 대화 상자

 

출처

 

대화 상자 윈도우는 프레임같은 주 윈도우와는 다르게 임시 정보를 나타내는 데 사용되는 독립적인 서브 윈도우이다.

 

주로 사용자에게 오류나 경고 또는 짧은 메시지를 전달하는 데 사용된다.

 

대화 상자는 프레임에 의존적이므로, 프레임이 삭제되면 대화 상자도 삭제된다. 또한 프레임이 아이콘화되면 대화 상자도 아이콘화된다. (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를 찾다 보니 알거 같다.

https://shin-01.tistory.com/entry/JAVA-JOptionPane-%EC%9E%90%EC%A3%BC%EC%93%B0%EB%8A%94-%EB%A9%94%EC%86%8C%EB%93%9C-%EC%82%AC%EC%9A%A9%EB%B2%95

 

728x90

'소프트웨어 (과거) > 자바 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