2013-04-29 4 views
5

나는 자바/스윙 GUI 프로젝트에 다음 코드를 참조하십시오 위의 코드에서이 스윙 코드는 어떻게 작동합니까?

MyDialog dlg = new MyDialog(parent, isFizz); 
MyDialogResults results = dlg.getResults(); 

eventBus.fireEvent(new MyDialogEvent(results)); 

, MyDialog extends JDialog. 그래서 명확하게 자식 대화 상자가 생성되고 (그리고 어떻게 든 최종 사용자에게 표시됩니다) 사용자가 대화 상자에서 (OK 또는 다른 버튼을 클릭하여) 종료하면 results 빈이 이벤트의 새 이벤트를 시작하는 데 사용됩니다 버스.

그러나 나는 두 가지와 사투를 벌인거야 :

  1. 방법/자바가 말했다되는 위치 실제로/사용자에게 대화 상자를 보여 그리는?;
  2. Java가 어떻게 이벤트를 버스에 보내기 전에 사용자가 대화 상자를 빠져 나갈 때까지 대기/대기하라는 지시를 받습니까? 그것은 JDialog 아이가 항상 JDialog 만들 때 대화 상자를 표시하고 대화가 종료 될 때까지 생성자에서 반환되지 않습니다

인가? (내가 아는 비록 그 사실 걸려 있지/냉동) 대화 상자가, "중지"를 개방하는 방법을 이해 도움/통찰력 사전에

public class MyDialog extends JDialog { 
    private boolean isFizz; 
    private MyDialogResults results; 

    // Getters and setters for all properties... 

    public MyDialog(Frame parent, boolean isFizz) { 
     super(parent, "My Dialog", true); 

     setIsFizz(isFizz); 

     setVisible(true); 
     dispose(); 
    } 
} 

감사 닫히고 : 여기 MyDialog 생성자 위에서 했나의 개요입니다 이벤트를 발생시킵니다.

답변

1

1)

setVisible(true); 

2)

super(parent, "My Dialog", true); 

은 자세한 내용은 JDialog에 대한 JavaDoc을 읽기.

+0

감사합니다. @Andrew Thompson (+1) - 그러나 # 2에서는 여전히 혼란 스럽습니다. [Javadoc 생성자] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JDialog.html#JDialog%28java.awt.Dialog ,%20java.lang.String,% 20boolean % 29)'modal'을 true로 설정하면 "표시된 경우 다른 최상위 창으로 사용자 입력을 차단합니다". 하지만 여기서 설명하는 것과 같지 않습니다. 나는 그것이 "사용자 입력"이 아니기 때문에 생성자가 끝날 때까지 다음 코드 행 ('MyDialogResults results = dlg.getResults();')이 실행되는 것을 막을 것이라고 생각하지 않는다. –

+1

수퍼 호에서 "true"는 대화 상자를 모달로 만듭니다. 즉, 대화 상자가 닫힐 때까지'setVisible (true)'에 대한 호출이 반환되지 않습니다. –

+0

* "" "표시된 경우 다른 최상위 창에 대한 사용자 입력을 차단합니다."다음 코드 줄 실행을 멈 춥니 다. –

1

Dialog.setVisible()을위한 대화가 폐쇄 될 때까지 대화 차단을 표시 방법 :

가장 관련이있다. documentation for Dialog을 참조하십시오. dispose()는 대화 상자 객체를 파괴합니다.

당신의 추측은 부분적으로 정확했습니다. 생성자가 대화 상자를 표시하고 닫힐 때까지 차단 한 다음 나중에 대화 상자를 삭제합니다. 그러나 이것은 JDialog가 아닌 "MyDialog"의 기능입니다.

+0

dlg 인스턴스가 범위를 벗어날 때까지 대화 상자가 삭제되지 않습니다. 따라서 사용자가 확인 버튼을 누른 후에 대화 상자에서 값을 검색 할 수 있습니다. 대화 상자 생성자 행 다음에 취소 단추가 있는지 확인해야합니다. –

관련 문제