2016-11-04 2 views
1
public static int clickOnExit() { 
    int dialogButton=JOptionPane.YES_NO_OPTION; 
    JOptionPane.showConfirmDialog(null, sharedConstants.exitMessage,"Confirm",dialogButton); 
    if(dialogButton == JOptionPane.YES_OPTION){return JFrame.EXIT_ON_CLOSE;} 
    else{return JFrame.DO_NOTHING_ON_CLOSE;} 

} 

zur Bestätigung (YES) es funktioniert, aber ich bin mir nicht sicher, ob Abbrechen Option ordnungsgemäß gelöst ist. Ich möchte nur JOptionPane abbrechen und Frame geöffnet halten.JFrame Schließen auf Dialog

+0

Siehe [Schließen einer Anwendung] (https://tips4java.wordpress.com/2009/05/01/closing-an-application/) für weitere Informationen zu diesem Thema. – camickr

Antwort

2

Sie müssen drei Dinge tun:

  1. Ihre Hauptrahmen nichts auf der Nähe zu tun.

frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);

  1. ein WindowListener Register, die das windowClosing Ereignis hört.
 
frame.addWindowListener(new WindowAdapter() { 
    public void windowClosing(WindowEvent e) { 
     maybeExit(); // Will not return if user clicks yes. 
     super.windowClosing(e); 
    } 
}); 
  1. Code über bedingt System.exit anzurufen, wenn der Benutzer bestätigt, sie wollen die Anwendung beenden.
 
private void maybeExit() { 
    int yesNo = JOptionPane.showConfirmDialog(this, "Are you sure you wish to exit?", "Confirm", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); 

    if (yesNo == JOptionPane.YES_OPTION) { 
     System.exit(0); 
    } 
} 
+0

Ich würde 'System.exit' nicht empfehlen. Es ist besser, diesen Frame zu entfernen, und wenn der letzte Frame entfernt wird, wird die JVM automatisch heruntergefahren. –

+0

@Jaroslaw: Ist das nicht nur der Fall, wenn die standardmäßige Schließfunktion des Rahmens auf EXIT_ON_CLOSE gesetzt ist? – Adamski

+0

Soweit ich mich erinnere, ist die Standardoperation 'HIDE_ON_CLOSE'. Alles hängt davon ab, was OP benötigt. Ich würde sagen, dass das Entsorgen sicherer ist, weil Sie eines Tages einen anderen Frame hinzufügen, der nach dem Schließen des ersten Frames geöffnet bleiben soll. Es stellt sich heraus, dass Sie den vorhandenen Code ändern müssen. –

0

Einige Vorschläge waren nützlich. Ich löste es auf diese Weise:

 frame.addWindowListener(new java.awt.event.WindowAdapter() { 
     @Override 
     public void windowClosing(java.awt.event.WindowEvent windowEvent) { 
      if (HandlingDialogBox.clickOnExit(frame) == 0) { 
       frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
      } else { 
       frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); 
      } 
     } 

    }); 

} 

UND

public static int clickOnExit(final JFrame frame) { 
    return JOptionPane.showConfirmDialog(frame,sharedConstants.exitMessage,"Confirm", 
    JOptionPane.YES_NO_OPTION); 
} 

Sorry für wenig chaotisch Klammer Gebrauch wird das aufzuräumen später ...

Verwandte Themen