2014-01-21 4 views
0

JOptionPane에 OK와 CANCEL 버튼이있는 두 개의 입력 텍스트 필드가있는 넌 모달 대화 상자가 있습니다. 다음과 같이 대화 상자를 표시합니다.JOptionpane + JDialog (넌 모달) 반환 값 얻기

 JTextField field_1 = new JTextField("Field 1"); 
     JTextField field_2 = new JTextField("Field 2"); 

     Object[] inputField = new Object[] { "Input 1", field_1, 
       "Input_2", field_2 }; 

     JOptionPane optionPane = new JOptionPane(inputField, 
       JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION); 
     JDialog dialog = optionPane.createDialog(null, "Input Dialog"); 
     dialog.setModal(false); 
     dialog.setVisible(true); 

어떻게 대화 상자에서 반환 값을 얻을 수 있습니까? 나는 Ok 또는 CANCEL 버튼이 눌러 졌는지 알아야합니다. 어떻게 이것을 달성 할 수 있습니까?

+0

[getValue] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JOptionPane.html#getValue%28%29)를 살펴볼 수 있습니다. –

답변

1

한 가지 방법은,

dialog.addComponentListener(new ComponentListener() { 
    @Override 
    public void componentResized(ComponentEvent e) { } 

    @Override 
    public void componentMoved(ComponentEvent e) { } 

    @Override 
    public void componentShown(ComponentEvent e) { } 

    @Override 
    public void componentHidden(ComponentEvent e) { 
     if ((int) optionPane.getValue() 
       == JOptionPane.YES_OPTION) { 
      // do YES stuff... 
     } else if ((int) optionPane.getValue() 
       == JOptionPane.CANCEL_OPTION) { 
      // do CANCEL stuff... 
     } else { 
      throw new IllegalStateException(
        "Unexpected Option"); 
     } 
    } 
}); 

주를 dialogComponentListener를 추가하고 가시성 변경을 수신하는 것입니다 : 당신은 아마 대신 ComponentAdapter를 사용한다; 일러스트레이션을 위해 전체 인터페이스를 보여주고 있습니다.

+0

나는 이것을 시도했지만 JOptionPane과 상호 작용할 때 Overriden 메서드가 호출되지 않는다. –

+1

@ MarkCramer 제 답변에 컴파일 시간 오류가 있다는 것을 알았습니다. 하지만 그 외에는 질문과 대답에서 코드를 가져 와서 예상대로 작동하는 것 같습니다. 그것이 당신을 위해 일하지 않는 곳의 예를 제공하는 질문을 만들 수 있습니까? – kuporific

1

Using getValue() 대화 상자가 어떻게 닫혔는지 알려줍니다. 넌 모달이기 때문에 대화 상자가 닫히면 정보를 가져와야합니다. Thread을 사용하면 정보를 반환하기 위해 대화 상자가 닫힐 때까지 대기합니다. 정보가 필요한 것에 대한 세부 정보를 제공하지 않으므로 다른 Thread을 사용하는 것이 최선의 해결책이 아닐 수도 있습니다.