2009-12-22 20 views
47

Aynı anda iki (veya daha fazla) JFrames görüntülemek istiyorum.
Bunlardan birini kapattığımda (varsayılan kapatma düğmesini kullanın), diğer çerçeveler yine de görünmelidir.Başka bir JFrame'i kapatmadan kapatın

Bunu nasıl yapabilirim?

cevap

73

Bir JFrame kapatıldığında uygulama sonlandırılacak istemiyor, documentation itibaren

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE) 

yerine

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

kullanırsanız: (

  • DO_NOTHING_ON_CLOSE WindowCons'ta tanımlanmış tants): Hiçbir şey yapmayın; Programın kayıtlı bir WindowListener nesnesinin windowClosing yönteminde işlem yapmasını gerektirir.
  • HIDE_ON_CLOSE (WindowConstant'ta tanımlı): Kayıtlı herhangi bir WindowListener nesnesini çağırdıktan sonra çerçeveyi otomatik olarak gizleyin.
  • DISPOSE_ON_CLOSE (WindowConstant'ta tanımlı): Kayıtlı herhangi bir WindowListener nesnesini çağırdıktan sonra çerçeveyi otomatik olarak gizleyin ve atın.
  • EXIT_ON_CLOSE (JFrame'de tanımlanmıştır): Sistem çıkış yöntemini kullanarak uygulamadan çıkın. Bunu yalnızca uygulamalarda kullanın. Tekrar aynı kareyi görüntülemek isterseniz sizin JFrame üzerinde setVisible(false) kullanabilirsiniz

    :


Bu soru anlaşılamadan, hala yararlı olabilir cevabım oldu.
Aksi takdirde remove all of the native screen resources numaralı telefona dispose() numaralı telefonu arayın.

+0

Teşekkürler, ancak pencereyi sağ üst köşedeki kapat düğmesiyle kapatıyorum. Kesinlikle setVisible (false) kullanmaz ve iş parçacığını durdurmalıdır. – Keating

+0

Sanırım bazı güveleri geçersiz kılmalıyım, hangisini güldüğümü bilmiyorum ama bunun kapanış güvesi olmadığına inanıyorum. – Keating

+0

Neyi başarmaya çalıştığınızdan emin değilim, lütfen sorunuzu düzenleyebilir ve ne yapmaya çalıştığınız ve nelerin işe yaramadığı hakkında bilgi ekleyebilir misiniz? –

3

Bu size yardımcı oluyor mu?

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

yararlıdır, teşekkürler! – Keating

İlgili konular