2016-06-11 2 views
0

JDialog에 작은 문제가 있습니다. 모든 작업을 수행 한 후에도 닫힌 후 빈 프레임이 남습니다. 때문에 ClassCastException이, 나는 불행하게도, 해결책을 찾기 위해 꽤 오랜 시도되지 않은 한, 어느 쪽이JDialog를 닫으면 빈 프레임이 남습니다.

daughterWindow.dispatchEvent(new WindowEvent(validation, WindowEvent.WINDOW_CLOSING)); 

daughterWindow.setVisible(false); 
daughterWindow.dispose(); 

도이 일이 가장 가능성이 나에게
WindowAdapter adapter = (WindowAdapter)jdialog.getWindowListeners()[0]; 
adapter.windowClosing(new WindowEvent((Window)jdialog, WindowEvent.WINDOW_CLOSING)); 

도움 마지막 하나가 던졌습니다. 스레드에서

예외 "AWT-EventQueue의-0"java.lang.ClassCastException가 : javax.swing.SwingUtilities $ SharedOwnerFrame이 java.awt.event.WindowAdapter

여기 내 코드의 캐스트 할 수없는, 어쩌면 누군가가 나에게 힌트를 줄 수 있습니다.

And a screen of the problem

JDialog daughterWindow = new JDialog(); 
    daughterWindow.setModal(true); 
    daughterWindow.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 
    daughterWindow.getContentPane().setLayout(new BoxLayout(daughterWindow.getContentPane(), BoxLayout.Y_AXIS)); 

    UIManager.put("FileChooser.readOnly", Boolean.TRUE); 
    JFileChooser open = new JFileChooser(); 
    File rsc = new File(System.getProperty("user.dir") + "\\rsc\\"); 
    if(!rsc.exists()) rsc.mkdir(); 
    open.setCurrentDirectory(new File(System.getProperty("user.dir") + "\\rsc\\")); 
    open.setDialogTitle("Ordner mit der Datenbank auswählen"); 
    open.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 

    if(open.showOpenDialog(daughterWindow) == JFileChooser.APPROVE_OPTION){ 
     UIManager.put("FileChooser.readOnly", Boolean.FALSE); 
     setValidateAccessWindowLayout(open.getSelectedFile()); 
     daughterWindow.dispatchEvent(new WindowEvent(daughterWindow, WindowEvent.WINDOW_CLOSING)); 
    } else{ 
     UIManager.put("FileChooser.readOnly", Boolean.FALSE); 
     daughterWindow.dispatchEvent(new WindowEvent(daughterWindow, WindowEvent.WINDOW_CLOSING)); 
    } 

    daughterWindow.setResizable(false); 
    daughterWindow.pack(); 
    daughterWindow.setVisible(true); 
사전에 감사합니다!

업데이트 : 분명히 불필요한 캐스트없이 세 번째 옵션을 체크 아웃했지만 그뿐만 아니라 도움이되지 않았다.

JFileChooser open = new JFileChooser();

모달로 정의 둘 다

JDialog daughterWindow = new JDialog();

:

WindowListener adapter = daughterWindow.getWindowListeners()[0]; 
adapter.windowClosing(new WindowEvent(daughterWindow, WindowEvent.WINDOW_CLOSING)); 
+0

더 도움이 빨리 들어, [MCVE] 또는 [짧은, 콘도, 올바른 예를 게시 ] (http://www.sscce.org/). –

답변

0

당신은 코드의 제공 조각에서 만든 두 시각적 요소가 있습니다. 기본적으로 - 하나가 활성화되어 있고 다른 하나가 활성화되어 있지 않은 경우에도 제어 할 수있는 가능성이 없습니다.

나는 당신이 당신의 daughterWindow.setModal(false);

을 설정하고

open.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 

daughterWindow.setResizable(false); 
daughterWindow.pack(); 
daughterWindow.setVisible(true);   

if(open.showOpenDialog(daughterWindow) == JFileChooser.APPROVE_OPTION){ 

업데이트를 이동하는 것이 좋습니다. 이 파일 대화 상자가 모달 코드에서 명확하지 않다,하지만 자바 문서에 따라 그 것이다 :

File choosers provide a GUI for navigating the file system, and then either choosing a file or directory from a list, or entering the name of a file or directory. To display a file chooser, you usually use the JFileChooser API to show a modal dialog containing the file chooser. https://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html

+0

먼저 실마리를 가져 주셔서 감사합니다! 나는'daughterWndow' 요소의 양상을 가지고 놀아 보려고 노력했고, 눈에 띄는 효과가없는 여러 방면에서 그것을 작동 시키거나 작동 불능으로 만들려고 노력했다. 게다가'if (open.showOpenDialog (daughterWindow) == JFileChooser.APPROVE_OPTION) '이후의 사례를 다루려고했거나 아니면 전혀 무의미 했나요? –

+0

모달 파일 선택 대화 상자를 열기 전에'daughterWindow'가 표시되는지 확인하십시오. –

+0

그게 다야! 이 경우에는'daughterWindow'를 전혀 볼 수 없도록 설정해야합니다. 그렇지 않으면 행에 두 번 나타납니다. 고마워요! –