2012-08-15 4 views
1

나는 통과 할 때마다 객체 목록을 가로 지르는 프로그램을 만들고 있습니다. 오브젝트의 "시간"(즉, 패스의 수)이 올라 오면 JDialog가 나타나서 다음 작업을 요청합니다. 문제는이 요청을 한 번에 처리하는 여러 객체를 처리하는 방법입니다.JDialog를 "모달"로하고 다른 윈도우는 차단하지 않겠습니까?

JDialog 모달을 만들면 각 개체가 차례로 요청을 내립니다. 주 프로그램 창을 사용할 수 없기 때문에 원하지 않습니다.

JDialog가 모달이 아닌 경우 각 패스마다 하나씩 여러 인스턴스가 표시됩니다. 또는 싱글 톤으로 설정하면 하나의 인스턴스 만 나타나지만 목록의 마지막 개체 인 요청만으로도 사용할 수 있습니다.

대화 상자를 팝업하고 사용자가 다른 창을 사용할 수있게하고 다른 개체가 대화 상자를 사용하기 위해 기다릴 수있는 방법이 있습니까?

+1

대기열이 필요합니다. 코드를 게시 한 경우 도움이 될 수 있습니다. –

+0

Aaron, 개체가 이미 정렬 대기열에 있습니다. 대기열을 전진하기 전에 JDialog가 닫히거나 숨겨 질 때까지 대기 상태로 만드는 방법을 모르겠습니다. –

+1

은 지정된 대기열과 WindowListener를 사용합니다. –

답변

2

의견에서 언급했듯이이 문제는 부모의 modalityWindow을 변경하여 해결할 수 있습니다. 단점은 "동작은 구현에 따라 다릅니다."

대안으로, 배경 스레드의 객체를 가로 질러 SwingWorker으로 트래핑하고 적합한 구성 요소에 새로운 후보를 추가하는 것을 고려하십시오. JList, JTable 또는 JTabbedPane입니다. 요소 양식을 선택하면 기존 모달 대화 상자가 열리고 완료되면 요소가 제거됩니다. 관련 예제는 here입니다. 제안 된 각 구성 요소에는 상태를 나타내는 아이콘으로 레이블을 지정할 수 있습니다.

0

원래 창 ModalExclusionType을 "application"으로 설정하고 완료되면 "no exclude"로 다시 전환하여이를 해결했습니다.