메인 창에 JFrame
클래스를 상속받은 스윙 응용 프로그램이 있습니다. 이 응용 프로그램은 JavaFX로 전환 중이므로 제어판을 비롯한 JavaFX 구성 요소에 많은 부분이 있습니다. 비 UI 스레드에서 네이티브 파일 선택기를 모달 방식으로 표시하려면 메인 JFrame
에 상대적으로 표시해야합니다. 소유자를 FileChooser
클래스로 설정하면이 작업을 수행 할 수 있지만 소유자가 javafx.stage.Window
이어야합니다. JFrame
을 javafx FileChooser
또는 Stage
의 소유자로 설정하는 해킹이 있습니까?스윙 응용 프로그램 내에서 모달 javafx.stage.FileChooser 만들기
0
A
답변
1
해결 방법은 FileChooser
이 종료 될 때까지 JFrame
을 선택하지 못할 수 있습니다. 내가 모든 것을 잘 스윙을 알 수 없기 때문에 여기에
- 제거 초점을 어떻게 든 (아마도
setFocusableWindowState(false)
를 사용하고 계십니까?) - 는 FXApplication 스레드에 FileChooser을 열
- 완료 후 (
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
아무도 내가 아는 바 없다. 5 분의 인터넷 검색 결과에 따르면 소유자를 'null'로 설정하는 것이 일반적인 관행입니다. – MMAdams
윈도우의 소유자를 설정하는 데 문제가 없습니다. 문제는 FileChooser가 열려있을 때 JFrame을 클릭 할 수 있다는 것입니다. –
'swing' 태그를 추가하는 것이 좋습니다. 해결책은'FileChooser'가 닫힐 때까지 어떻게 든 JFrame을 선택하지 못하게하는 것일 수 있습니다. 나는'javafx' 경험을 가진 프로그래머보다'swing '에 더 많은 경험이있는 프로그래머가 도움이 될 수 있다고 생각합니다. – MMAdams