▶ 대화 상자



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

 

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

 

대화 상자는 프레임에 의존적이므로, 프레임이 삭제되면 대화 상자도 삭제된다. 또한 프레임이 아이콘화되면 대화 상자도 아이콘화된다. (AWTDialog 클래스로부터 상속된 특성)

 

대화 상자의 종류는 크게 모달형(Modal Dialog)”비모달형(Non-Modal Dialog)”로 두 가지가 있다.

  • 모달형(Modal Dialog) : 대화 상자를 끝내야만 다른 작업을 할 수 있다. ex) JOptionPane

  • 비모달형(Non-Modal Dialog) : 대화상자를 끝내지 않고 다른 윈도우를 사용하여 작업할 수 있다. JDialog 클래스를 직접 사용하여야 한다. 또한 다이얼로그는 디폴트로 모달형이며, 모달형인지 지정하는 것은 다이얼로그의 setModal() 메소드를 사용하여 지정하거나 생성자에 지정할 수 있다.

 

아래는 대화 상자 객체의 종류이다.

  • JOptionPane : 주로 표준화된 간단한 대화 상자

  • ProgressMonitor : 진행 과정을 보여주는 간단한 대화 상자

  • JColorChooser : 색상 선택기

  • JFileChooser : 파일 선택기

  • JDialog :맞춤형 대화 상자 즉, 커스터마이징이 가능하다.


▶ JOptionPane


- 쉽고 빠르게 간단한 대화 상자를 만들 때 주로 사용되는 클래스이다.

 

일반적인 대화 상자를 위한 아이콘 선택, 배치 관리, 제목 및 텍스트, 버튼의 텍스트를 변경할 수 있다.

 

제공하는 메소드는 showXXXDialog() 형태의 메소드명을 가지며, 대부분 간단한 모달형 대화상자를 생성하기 위해 사용된다.


showMessageDialog() : 버튼이 하나 있는 다이얼로그, 아래와 같이 세 가지 종류로 중복 정의되어있다.

      • showMessageDialog(Component parentComp, Object message)

      • showMessageDialog(Component parentComp, Object message, String title, int messageType)
      • showMessageDialog(Component parentComp, Object message, String title, int messageType, Icon icon)

[매개변수 설명]

      • 첫 번째 매개변수로는 다이얼로그를 호출하는 부모 컴포넌트가 들어간다. 나의 경우 JFrame을 상속한 클래스에서 다이얼로그를 호출했고, 코드 또한 해당 클래스에서 작성하였으므로 this를 매개변수로 넘겨주었다.

      • messageType은 총 4가지로 이루어져 있다. 아이콘을 설정하고 싶지 않다면 즉, 메시지의 종류를 구별하지 않기 위해서는 JOptionPane.PLAIN_MESSAGE를 매개변수로 넘기면 된다아래는 예시이다. (예시로 두 번째 메소드를 사용하였다.)

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.showOptionDialog(Component parentComp, Objecct message, String title, int optionType, int messageType, Icon icon, Object[] obj, ...);

[매개변수 설명]

      • 네 번째 매개변수인 OptionType 은 세 가지로 구성된다.

JOptionPane.YES_NO_CANCEL_OPTION

 예아니오취소 3가지의 대답(선택지의 개수가 3개)

 JOptionPane.YES_NO_OPTION

 예아니오 2가지의 대답(선택지의 개수가 2개)

 JOptionPane.YES_OPTION

 예만 있는 1가지의 대답(선택지의 개수가 1개)

      • messageType 은 위에서 설명한 showMessageDialog의 매개변수와 동일하다.

      • Icon은 다이얼로그에서 나타낼 아이콘을 의미하는데 아래의 예시에서는 사용하지 않아서 null 을 매개변수로 넘겼다.

      • 마지막 매개변수인 오브젝트 배열타입의 obj는 대답을 커스터마이징할 수 있는 방법을 제공한다. , optionType으로 몇 개의 선택지를 만들 것인지 정하고, 이 매개변수로 선택지를 설정하는 것이다.

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() : 사용자로부터 다시 확인하고 싶은 경우에 사용된다.

      • showConfirmDialog(Component parentComp, Object message)

      • showConfirmDialog(Component parentComp, Object message, String title, int optionType);

      • showConfirmDialog(Component parentComp, Object message, String title, int optionType, int messageType);

      • showConfirmDialog(Component parentComp, Object message, String title, int optionType, int messageType, Icon icon);

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가지의 메소드가 중복 정의되어있다.

      • showInputDialog(Component parentComponent, Object message)

      • showInputDialog(Component parentComponent, Object message, Object initialSelectionValue)

      • showInputDialog(Component parentComponent, Object message, String title, int messageType)

      • showInputDialog(Component parentComponent, Object message, String title, int messageType, Icon icon, Object[] selectionValues, Object initialSelectionValue)

      • showInputDialog(Object message)

      • showInputDialog(Object message, Object initialSelectionValue)

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);
        }
    }
}


[ "다이얼로그 열기" 버튼을 클릭하면 아래와 같은 다이얼로그 창이 뜬다.]






'Programming Language > JAVA' 카테고리의 다른 글

34. Package - 패키지  (0) 2017.07.23
33. JTable - 테이블  (0) 2017.07.22
31. JMenuBar - 메뉴바 설정하기  (0) 2017.07.13
30. JColorChooser, JFileChooser - 색상 선택기, 파일 선택기  (0) 2017.06.29
29. JTree - 트리  (0) 2017.06.29

+ Recent posts