2017-11-08 5 views
0

메인 창에 JFrame 클래스를 상속받은 스윙 응용 프로그램이 있습니다. 이 응용 프로그램은 JavaFX로 전환 중이므로 제어판을 비롯한 JavaFX 구성 요소에 많은 부분이 있습니다. 비 UI 스레드에서 네이티브 파일 선택기를 모달 방식으로 표시하려면 메인 JFrame에 상대적으로 표시해야합니다. 소유자를 FileChooser 클래스로 설정하면이 작업을 수행 할 수 있지만 소유자가 javafx.stage.Window이어야합니다. JFrame을 javafx FileChooser 또는 Stage의 소유자로 설정하는 해킹이 있습니까?스윙 응용 프로그램 내에서 모달 javafx.stage.FileChooser 만들기

+0

아무도 내가 아는 바 없다. 5 분의 인터넷 검색 결과에 따르면 소유자를 'null'로 설정하는 것이 일반적인 관행입니다. – MMAdams

+0

윈도우의 소유자를 설정하는 데 문제가 없습니다. 문제는 FileChooser가 열려있을 때 JFrame을 클릭 할 수 있다는 것입니다. –

+1

'swing' 태그를 추가하는 것이 좋습니다. 해결책은'FileChooser'가 닫힐 때까지 어떻게 든 JFrame을 선택하지 못하게하는 것일 수 있습니다. 나는'javafx' 경험을 가진 프로그래머보다'swing '에 더 많은 경험이있는 프로그래머가 도움이 될 수 있다고 생각합니다. – MMAdams

답변

1

해결 방법은 FileChooser이 종료 될 때까지 JFrame을 선택하지 못할 수 있습니다. 내가 모든 것을 잘 스윙을 알 수 없기 때문에 여기에

는 일부 의사의 다음 JFrame의에서

  1. 제거 초점을 어떻게 든 (아마도 setFocusableWindowState(false)를 사용하고 계십니까?)
  2. 는 FXApplication 스레드에 FileChooser을 열
  3. 완료 후 (Thread.join()을 사용하거나 스레드 관리를 원한다면) 포커스를 JFrame에 복원하십시오.
+0

답을 고맙습니다. 그러나 정확한 답을 알려 드리기 위해 정확한 해결책을 추가했습니다. –

1

실제로 좋아요 :

JFrame frame = // get window 
frame.setEnabled(false); // emulate window modality 

    File file = fileChooser.showOpenDialog(null); 
    if (file == null || !openFile(file)) { // return true if file was opened correctly 
     frame.setEnabled(true); 
     frame.requestFocus(); // window looses focus after enabling 
    } 

그래서 FileChooser은 모달 창과 같이 동작합니다. 단점은 창을 다시 사용할 수 있도록 모든 경로를 제어해야하므로 영원히 사용할 수 없게됩니다.

+0

다행 이라구요! 이 답을 수락 된 것으로 표시하려면 확인란을 클릭해야합니다. 문제가있는 사람들이 솔루션을 찾을 수 있음을 알 수 있습니다. – MMAdams