2010-10-08 20 views
13

प्रोग्रामेटिक बंद JFrame के ऊपरी दाएं कोने में बंद (एक्स) बटन पर क्लिक करने के प्रोग्रामेटिक समकक्ष क्या है?जेएफआरएएम

वहाँ dispose() विधि है, लेकिन है कि एक ही बात है, एक JFrame कई अलग अलग काम करने के लिए सेट किया जा सकता के बाद से बंद करने पर नहीं है (यदि वहाँ एक WindowListener शामिल उल्लेख करने के लिए नहीं)

+1

+1। मैंने हमेशा यह सोचा है लेकिन कभी पूछने के लिए समय नहीं लिया। – Andy

उत्तर

16

आप एक घटना प्रेषण करने के लिए घटक बताओ । इस मामले में, आप चाहते हैं कि यह विंडो बंद करने की घटना को प्रेषित करे।

private void exit() { 
    this.dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING)); 
} 
+0

कूल, यही वह है जिसे मैं ढूंढ रहा था। मुझे लगता है कि यह सुनिश्चित करने के लिए कि यह ईवेंट प्रेषण धागे पर है, आपको Swing.invokeLater() का उपयोग करने की आवश्यकता है। –

+0

@ जेसन, अगर इसे स्विंग घटक से बुलाया जा रहा है, तो यह पहले ही ईडीटी पर है। यही कारण है कि आप कभी स्विंग घटक के अंदर लंबी गणना नहीं करना चाहते हैं। (क्योंकि वे ईडीटी को अवरुद्ध करेंगे) – jjnguy

+0

दाएं। लेकिन मैं इसे किसी अन्य घटक से कॉल करना चाहता हूं। (मैंने अपने हस्ताक्षर के रूप में 'सार्वजनिक शून्य बंद विन्डो()' का उपयोग किया।) –

2

जब आप जेएफआरएएम पर एक्स को दबाते हैं, तो सिस्टम को विभिन्न चीजों को करने के लिए सेट किया जा सकता है। डिफ़ॉल्ट यह है कि खिड़की बस सेट (दृश्य) के साथ छिपी हुई है।

आप अलग-अलग चीजों को बंद करने के लिए एक फ्रेम सेट कर सकते हैं - आप इसे सेटडिफॉल्टक्लोऑपरेशन के आधार पर कोड का निपटान, छुपा या कॉल कर सकते हैं। यहां विकल्प हैं:

DO_NOTHING_ON_CLOSE: कुछ भी न करें; विंडो में ऑपरेशन को संभालने के लिए कार्यक्रम की आवश्यकता है एक पंजीकृत विंडो लिस्टनर ऑब्जेक्ट की क्लोजिंग विधि।

HIDE_ON_CLOSE: किसी भी पंजीकृत विंडो लिस्टनर ऑब्जेक्ट्स का आविष्कार करने के बाद फ्रेम को स्वचालित रूप से छुपाएं।

DISPOSE_ON_CLOSE: किसी भी पंजीकृत विंडोलिस्टर ऑब्जेक्ट्स का आविष्कार करने के बाद फ्रेम को स्वचालित रूप से छुपाएं और निपटें।

EXIT_ON_CLOSE: सिस्टम निकास विधि का उपयोग कर एप्लिकेशन से बाहर निकलें। इसे केवल अनुप्रयोगों में उपयोग करें।

लेकिन मुझे लगता है कि आप जो कर रहे हैं वह सेट (दृश्य) है।

0

आपको एडब्ल्यूटी संदेश कतार में कॉल डालना है, इसलिए सभी समय सही ढंग से होता है, अन्यथा यह सही घटना अनुक्रम को प्रेषित नहीं करेगा, खासकर बहु-थ्रेडेड प्रोग्राम में।

public void closeWindow() 
{ 
    if(awtWindow_ != null) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       awtWindow_.dispatchEvent(new WindowEvent(awtWindow_, WindowEvent.WINDOW_CLOSING)); 
      } 
     }); 
    } 
} 
संबंधित मुद्दे