2016-06-11 14 views
0

Ich habe ein kleines Problem mit einem JDialog, es hinterlässt einen leeren Rahmen nach dem Schließen trotz allem, was ich tue. Ich habe versucht, ziemlich lang, eine Lösung zu finden, die leider weder dieseSchließen von JDialog hinterlässt einen leeren Rahmen

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

noch

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

noch dieses half mir

WindowAdapter adapter = (WindowAdapter)jdialog.getWindowListeners()[0]; 
adapter.windowClosing(new WindowEvent((Window)jdialog, WindowEvent.WINDOW_CLOSING)); 

höchstwahrscheinlich aufgrund einer Classcast der letzte wirft.

Exception in thread "AWT-Eventqueue-0" java.lang.ClassCastException: javax.swing.SwingUtilities $ SharedOwnerFrame nicht java.awt.event.WindowAdapter gegossen werden kann

Hier ist mein Code, vielleicht kann mir jemand einen Hinweis geben.

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); 

And a screen of the problem
Vielen Dank im Voraus!

UPDATE: überprüfte die dritte Option ohne scheinbar unnötige Besetzung, aber das half auch nicht.

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

Für eine bessere Hilfe früher, Posten [MCVE] oder [Kurz, Self Contained, Korrekt Beispiel ] (http://www.sscce.org/). –

Antwort

0

Sie haben zwei optische Elemente in dem bereitgestellten Fragment des Codes erstellt:

JDialog daughterWindow = new JDialog();

und

JFileChooser open = new JFileChooser();

von ihnen beiden als modal definiert. Was im Grunde bedeutet: Während einer aktiv ist, ist ein anderer nicht aktiv, hat nicht einmal die Möglichkeit, die Kontrolle zu übernehmen.

Ich schlage vor, Sie setzen Ihre daughterWindow.setModal(false);

und

open.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 

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

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

aktualisieren bewegen. Es ist nicht offensichtlich aus dem Code, die Datei-Dialog modal ist, aber laut Java Doc ist:

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

Zunächst einmal danke für den Hinweis! Ich habe versucht, mit der Modalität des 'towelWndow'-Elements herumzuspielen und es in verschiedenen Vierteln zu aktivieren und zu deaktivieren, leider ohne erkennbaren Effekt. Außerdem habe ich versucht, den Fall nach 'if (open.showOpenDialog (tochterWindow) == JFileChooser.APPROVE_OPTION) zu behandeln. Oder war es überhaupt sinnlos? –

+0

Stellen Sie sicher, dass Sie 'tochterfenster 'anzeigen, bevor Sie die modale Datei öffnen, wählen Sie den Dialog, nicht danach. –

+0

Das war's! In diesem Fall sollten wir 'tochterfenster' nicht nur sichtbar machen, sonst würde es zweimal hintereinander erscheinen. Vielen Dank! –