2009-02-21 27 views
7

मेरे पास एक छोटा फ्रेम है जहां मैं उपयोगकर्ता & पासवर्ड पूछता हूं। यह फ्रेम मुख्य विंडो में एक बटन पर क्लिक करके खोला जाएगा।जावा स्विंग बंद खिड़की से बाहर निकलने के बिना

फिर मेरे पास दो बटन हैं: ठीक है और रद्द करें।

जब मैं "रद्द करें" बटन पर क्लिक करता हूं, तो मुझे ऐप से बाहर निकलने के बिना इस फ्रेम को बंद करने की आवश्यकता होती है।

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

उत्तर

18

आप या तो फ्रेम.hide() या Frame.dispose() का उपयोग कर सकते हैं। मैं जेडियलोग या जॉप्शनपेन

सुधार: छुपाएं() को बहिष्कृत करने की भी सिफारिश करता हूं। सेटविज़िबल (झूठा) का उपयोग

+0

ठीक है, और क्या होगा यदि मेरा क्लिक हैंडलर फ्रेम के लिए एक अलग वर्ग के बाहरी भाग में है? – Giancarlo

+0

आपको क्लिक हैंडलर (कन्स्ट्रक्टर में) फ्रेम के संदर्भ को पास करना होगा – TofuBeer

3

पर आप फ्रेम पर सेट दृश्य (झूठी) को कॉल कर सकते हैं।

आप HIDE_ON_CLOSE में गुजरने वाले फ्रेम पर setDefaultCloseOperation को भी कॉल करना चाहते हैं (यहां जानकारी: http://java.sun.com/javase/6/docs/api/javax/swing/JFrame.html#setDefaultCloseOperation%28int%29)। इससे ऐप को दूर जाने से रोका जा सकता है अगर उपयोगकर्ता इसे बंद करने के लिए जेएफआरएएम पर "एक्स" हिट करता है।

2

यकीन है कि तुम नहीं करें:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
+0

यह मेरी समस्या दोस्त नहीं है :) – Giancarlo

1

बाहरी कक्षा में एक समारोह बनाने जहां JFrame को लागू कर रहे हैं (आप को रद्द बटन दबाने पर बंद करने की आवश्यकता)।
उस समारोह के कार्यान्वयन में this.setVisible(false); लिखें।
अंत में इस फ़ंक्शन को ActionListener कार्यान्वयन में कॉल करें जब आप इसे बंद करना चाहते हैं।

3

हो सकता है कि एक क्लीनर तरीका सिर्फ DISPOSE_ON_CLOSE को EXIT_ON_CLOSE से setDefaultCloseOperation बदल जाता है:

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
3

कार्रवाई श्रोता विधि में उपयोग this.dispose(); जब उपयोगकर्ता नाम/पासवर्ड सफल होता है। उदाहरण के लिए:

public void actionPerformed(ActionEvent ae) { 

    if(ae.getSource()=="button you press to confirm username/password"){ 
     if(userNameTf.getText().equals(username)&&isPassword(passwordTf.getPassword())){ 
      new "window to be opened upon success" 
      this.dispose(); // calls dispose on this object ie. 
              // the login window 
     } 
     else{ 
      userNameTf.setText(""); 
      passwordTf.setText(""); 

      JOptionPane.showMessageDialog(this, 
        "Username and/or password is incorrect!", 
        "Attention!", 
        JOptionPane.WARNING_MESSAGE); 
     } 
    } 

} 

आप ईवेंट प्रबंधित करने के इनर क्लासों उपयोग कर रहे हैं बस की जगह 'this.dispose()' Super_Class_Name.this.dispose साथ();

1

आप कई मायनों में यह कर सकते हैं, लेकिन इन दो तरह से सबसे उपयोगी एक
1. लिखने this.setVisible(false) अंदर में लागू ActionListener
या
2. लिखने this.dispose() अंदर लागू किया ActionListener हैं। आशा है कि यह आपकी मदद करेगा।

+0

यह वही है जो स्वीकृत उत्तर कहता है। पहले से स्वीकार किए जाने वाले दोहराने के लिए उत्तर जोड़ने का कोई कारण नहीं है। –

2

सेट दृश्य विधि मेमोरी संसाधनों को जारी नहीं करती है और केवल तभी उपयोग की जानी चाहिए जब फ़ॉर्म का फिर से उपयोग किया जाए।

विधि का निपटान करें इस विंडो, इसके सबकंपोनेंट्स और उसके सभी स्वामित्व वाले बच्चों द्वारा उपयोग किए जाने वाले सभी मूल स्क्रीन संसाधनों को जारी करता है।यही है, इन घटकों के संसाधनों को नष्ट कर दिया जाएगा, वे जो भी स्मृति उपभोग करते हैं उन्हें ओएस में वापस कर दिया जाएगा, और उन्हें अपरिहार्य के रूप में चिह्नित किया जाएगा।

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