2009-12-22 15 views
47

मैं एक ही समय में दो (या अधिक) JFrames प्रदर्शित करना चाहता हूं।
जब मैं उनमें से एक बंद करता हूं (डिफ़ॉल्ट बंद बटन का उपयोग करें), अन्य फ्रेम अभी भी दिखाई दे सकते हैं।एक बंद करने के बिना एक जेएफआरएएम बंद करें?

मैं यह कैसे कर सकता हूं?

उत्तर

73

यदि आप करते हैं नहीं है जब एक JFrame बंद कर दिया है आपके आवेदन को समाप्त करना चाहते,

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE) 
बजाय

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

documentation से उपयोग करें:

  • DO_NOTHING_ON_CLOSE (विंडोकंस में परिभाषित टेंट): कुछ भी मत करो; विंडो में ऑपरेशन को संभालने के लिए कार्यक्रम की आवश्यकता है एक पंजीकृत विंडो लिस्टनर ऑब्जेक्ट की क्लोजिंग विधि।
  • HIDE_ON_CLOSE (विंडोकॉन्स्टेंट में परिभाषित): किसी भी पंजीकृत विंडोलिस्टर ऑब्जेक्ट्स को आविष्कार करने के बाद फ्रेम को स्वचालित रूप से छुपाएं।
  • DISPOSE_ON_CLOSE (विंडोकॉन्स्टेंट में परिभाषित): किसी भी पंजीकृत विंडोलिस्टर ऑब्जेक्ट्स को आविष्कार करने के बाद फ्रेम को स्वचालित रूप से छुपाएं और निपटें।
  • EXIT_ON_CLOSE (जेएफआरएएम में परिभाषित): सिस्टम निकास विधि का उपयोग कर एप्लिकेशन से बाहर निकलें। इसे केवल अनुप्रयोगों में उपयोग करें।

यह मेरा जवाब था से पहले सवाल स्पष्ट किया गया है, अभी भी उपयोगी हो सकता है:

आप अपने JFrame पर setVisible(false) उपयोग कर सकते हैं अगर आप एक ही फ्रेम फिर से प्रदर्शित करना चाहते हैं।
अन्यथा dispose() पर remove all of the native screen resources पर कॉल करें।

+0

धन्यवाद, लेकिन मैं ऊपरी दाएं कोने में बंद-बटन के साथ विंडो बंद करता हूं। यह निश्चित रूप से सेट दृश्य (गलत) का उपयोग नहीं करता है और धागे को रोकना चाहिए। – Keating

+0

मुझे लगता है कि मुझे कुछ मोहित ओवरराइड करना होगा, मुझे नहीं पता कि कौन सा मोटा हुआ है लेकिन मेरा मानना ​​है कि यह बंद होने वाला नहीं है। – Keating

+0

मुझे यकीन नहीं है कि आप क्या हासिल करने का प्रयास करते हैं, क्या आप कृपया अपना प्रश्न संपादित कर सकते हैं और आप जो करने का प्रयास करते हैं उसके बारे में कुछ जानकारी जोड़ सकते हैं और क्या काम नहीं करता है? –

3

क्या इससे आपकी मदद मिलती है?

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

यह उपयोगी है, धन्यवाद! – Keating

संबंधित मुद्दे