2011-08-06 8 views
12

बंद करने के लिए बटन मैं जेडीअलॉग के नीचे एक बटन (जेबटन) जोड़ना चाहता हूं जो दबाए जाने पर जेडियलॉग को बंद करना चाहिए। समस्या यह है कि मुझे नहीं पता कि उस बटन के एक्शनलिस्टर में क्या लिखना है। मैं नहीं चाहता कि बटन प्रोग्राम से बाहर निकलें, बस संवाद बंद करें।बटन JDialog

जेडियलॉग जेडियलॉग के रचनाकारों में से एक को स्पष्ट रूप से कॉल करके बनाया गया है, न कि जॉप्शनपेन से तरीकों में से एक को कॉल करके।

मुझे आश्चर्य हुआ कि मैं Google का उपयोग करके इसका उत्तर नहीं ढूंढ पाया। मुझे उम्मीद थी कि अक्सर एक समस्या जो अक्सर एनकॉर्टर होती है, बहुत सारी प्रोग्रामिंग साइटों पर व्यापक रूप से कवर की जाएगी। बहुत अजीब है कि यह नहीं है।

+0

ठीक है, मैंने आज पहले जेडीअलॉग का उपयोग नहीं किया। और मैंने उस जावदोक को कुछ दर्जन बार देखा (मुझे यह देखने की ज़रूरत थी कि इसमें कौन सी विधियां हैं)। लेकिन मुझे इसे बंद करने के बारे में कुछ भी नहीं देखा। – SoboLAN

+1

@ सोबोलान दो विधियों: 'निपटान()' और 'सेट दृश्यमान (झूठा) ' –

उत्तर

27
import java.awt.event.*; 
import javax.swing.*; 

public class YourDialog extends JDialog implements ActionListener { 

    JButton button; 

    public YourDialog() { 
    button = new JButton("Close"); 
    button.addActionListener(this); 
    add(button); 
    pack(); 
    setVisible(true); 
    } 

    public void actionPerformed(ActionEvent e) { 
     dispose(); 
    } 
} 
  • पास केवल dispose() विधि माता पिता फ्रेम बंद नहीं का उपयोग कर dialolg। कारण है कि जेवीएम समाप्त नहीं हुआ है।

+0

मुझे लगता है कि निपटान() इसे करने का सबसे अच्छा तरीका है। धन्यवाद, मेरे पास अब सब कुछ है जो मुझे चाहिए। – SoboLAN

5

आप की तरह कुछ चाहता हूँ ActionListener की actionPerformed() विधि में:

dialog.setVisible(false); 

आप स्थायी रूप से संवाद से छुटकारा पाने चाहते हैं (स्मृति से यह मुक्त) तो आप होगा भी कॉल:

dialog.dispose(); 

... जहां संवाद आपके संवाद का नाम है। यदि dialog एक स्थानीय चर है, तो आपको इसे इस तरह से एक्सेस करने के लिए अंतिम बनाना होगा।

आप JDialog का एक उपवर्ग के हिस्से के रूप बटन जोड़ने रहे हैं (यानी आप class MyDialog extends JDialog मिल गया है और आप MyDialog में कार्रवाई श्रोता जोड़ रहे हैं) आप चाहेंगे:

MyDialog.this.setVisible(false); 
+0

मैंने यह किया जब मैंने जेडियलॉग बनाया: संवाद .etDefaultCloseOperation (JDialog.DISPOSE_ON_CLOSE); एक्शनलिस्टर में मैंने इन 2 विधियों को बुलाया: dialog.setVisible (false); dialog.dispatchEvent (नया WindowEvent (संवाद, WindowEvent.WINDOW_CLOSING); JDialog वास्तव में बंद हो जाता है लेकिन जिस तरह से मैंने किया वह सही है? आपके (आश्चर्यजनक रूप से तेज़) उत्तर के लिए धन्यवाद, बीटीडब्ल्यू – SoboLAN

+0

@ सोबोलन कोई चिंता नहीं - हाँ, सही दृष्टिकोण है। – berry120

+0

@ बेरी 120 - निश्चित रूप से जेडियलोग, यह लेआउट और घटक इस विधि का उपयोग कर स्मृति में मौजूद रहेगा? मुझे लगता है कि आप नियमित रूप से इसे गंभीर गड़बड़ कर सकते हैं। –

6

आप ActionListenerWindowEvent.WINDOW_CLOSING प्रेषित कर सकता है, जैसा कि here दिखाया गया है।

+2

+1, ईवेंट को विंडो में सभी को प्रेषित करना किसी भी विंडो लिस्टर कोड को निष्पादित किया जाना चाहिए। इसके लायक होने के लिए आप [एक्जिकएक्शन 'कक्षा में भी एक आवेदन बंद कर सकते हैं (http://tips4java.wordpress.com/2009/05/01/closing-an-application/)। कार्रवाई थोड़ा अधिक सामान्य है जिसमें इसका उपयोग किसी भी फ्रेम या संवाद के साथ किया जा सकता है। – camickr

+0

@camickr: 'ExitAction' यह सुनिश्चित करने के लिए एक अच्छा तरीका दिखता है कि सभी निकास' WindowListener' से गुजरते हैं। – trashgod