2009-12-22 7 views

Répondre

73

Si vous ne pas voulez que votre demande de mettre fin lorsqu'un JFrame est fermé, utilisez

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE) 

au lieu de

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

De l'documentation:

  • DO_NOTHING_ON_CLOSE (défini dans WindowCons tants): Ne faites rien; exiger que le programme gère l'opération dans la méthode windowClosing d'un objet WindowListener enregistré.
  • HIDE_ON_CLOSE (défini dans WindowConstants): masque automatiquement le cadre après l'appel de tout objet WindowListener enregistré.
  • DISPOSE_ON_CLOSE (défini dans WindowConstants): Masquez et disposez automatiquement le cadre après l'appel des objets WindowListener enregistrés.
  • EXIT_ON_CLOSE (défini dans JFrame): Quittez l'application à l'aide de la méthode System exit. Utilisez-le uniquement dans les applications.

Ce fut ma réponse avant que la question a été clarifiée, pourrait encore être utile:

Vous pouvez utiliser setVisible(false) sur votre JFrame si vous souhaitez afficher la même image à nouveau.
Sinon, appelez dispose() à remove all of the native screen resources.

+0

Merci, mais je ferme la fenêtre avec le bouton de fermeture dans le coin supérieur droit. Il n'utilise pas définitivement setVisible (false) et doit arrêter le thread. – Keating

+0

Je pense que je dois passer outre mothed, je ne sais pas quel mothed mais je crois que ce n'est pas la mothed de fermeture. – Keating

+0

Je ne suis pas sûr de ce que vous essayez d'atteindre, pourriez-vous s'il vous plaît modifier votre question et ajouter des informations sur ce que vous essayez de faire et ce qui ne fonctionne pas? –

3

Cela vous aide-t-il?

import java.awt.BorderLayout; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class TwoJFrames { 
    public static void main(String[] args) { 
     int nb = 4; 
     if (args != null && args.length > 0) { 
      nb = Integer.parseInt(args[0]); 
     } 

     final int frameCount = nb; 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       for (int i = 0; i < frameCount; i++) { 
        JFrame frame = new JFrame("Frame number " + i); 
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
        JPanel p = new JPanel(new BorderLayout()); 
        p.add(new JLabel("Click on the corner to close..."), BorderLayout.CENTER); 
        frame.setContentPane(p); 
        frame.setSize(200, 200); 
        frame.setLocation(100 + 20 * i, 100 + 20 * i); 
        frame.setVisible(true); 
       } 
      } 
     }); 

    } 
} 
+1

c'est utile, merci! – Keating

Questions connexes