2016-07-22 15 views
-1

ich einen Editor bin zu entwickeln, wo an einem gewissen Punkt der Benutzer eine für die Auswahl einer Fläche innerhalb des Editors modal Dialog öffnet sich:JDialog kehrt Wert zu früh

Dialog

Mit einem Klick auf „Select-Bereich ... "wird der Dialog vorübergehend auf setVisible(false); eingestellt. Danach kann der Benutzer einen Bereich mit der Maus auswählen. Nach dem Loslassen der Maustaste öffnet sich der Dialog erneut mit setVisible(true); und die Informationen des ausgewählten Bereichs werden in den Textfeldern angezeigt. Wenn der Benutzer auf "OK" klickt, wird der Dialog gelöscht und die Informationen sollten an den Editor zurückgegeben werden.

Der Code für den Dialog Wert Rückkehr ist

@Override 
public Area handleDialog() { 
    setVisible(true); // Shows the dialog and blocks the parent window 
    return selectedArea; 
} 

Mein Problem ist nun, dass der Wert zu früh zurückgeführt wird, wenn der Anruf an setVisible(false); auftritt und nicht, wenn der Benutzer klickt auf „Ok“. So wird null zurückgegeben, da selectedArea zu diesem Zeitpunkt noch nicht zugewiesen ist. Ich denke, das passiert, weil das vorübergehende Verbergen des Dialogs die Modalität zurücksetzt und das Elternfenster wieder freigibt.

Gibt es eine Möglichkeit, den Rückgabewert zurückzuhalten und nur zurückzugeben, wenn Sie auf "Ok" klicken? Wenn nicht, denke ich, ich könnte meine Logik umschreiben und stattdessen mit einem WindowListener arbeiten, um dies zu umgehen.

+0

Sind Sie sicher, dass Ihr Dialog modal ist? – VGR

+0

@VGR Ja, es erweitert 'JDialog' und im Konstruktor ich' 'super (JOptionPane.getRootFrame(), true);' – QBrute

Antwort

-1

Ich habe es noch nicht herausgefunden, aber ich folgte meiner alternativen Route. Anstatt sich auf den Rückgabewert des Dialogs selbst zu verlassen, übergebe ich nun den DefaultListModel (den ich ursprünglich mit Daten füllen wollte) den ganzen Weg zum Dialog. Dort fülle ich es direkt nach dem Klick auf "Ok".

Es ist nicht schön, aber es macht den Job.

Verwandte Themen