2013-08-20 7 views
7

मुझे पता है, यह प्रश्न here: पर अक्सर अक्सर दिखाई देता है लेकिन मैं कुछ बहुत ही विशिष्ट उदाहरण प्रस्तुत करना चाहता हूं ... मुझे यकीन नहीं है कि मैं चीजें बनाती हूं सही।जेडियलोग से वापसी मूल्य; निपटान(), सेट विज़िबल (झूठा) - उदाहरण

मुझे एक जेडियलॉग मिला है जिसमें मैं कुछ मान टाइप कर सकता हूं, कुछ चेकबॉक्स का चयन कर सकता हूं ... जो भी ... मुझे माईडियलोग में कुछ प्रतिक्रिया वस्तु भी मिली है जो माईडियोलॉग के "उत्तर" का प्रतिनिधित्व करती है।

JFrame में जो कॉल/JDialog बनाता है:, यह समाधान काम करता है:

MyDialog d = new MyDialog(this, ...); 
d.showDialog(); 
// After MyDialog is closed (it's modal): 
MyDialog.Response dialogResponse = d.getDialogResponse(); 
// Do something with response... 

डायलॉग (संवाद "सहेजें" बटन पर क्लिक करके बंद किया जा सकता):

btnSave.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     dialogResponse = prepareResponse(); // prepares response on the basis of some data introduced by a user; dialogResponse is called from JFrame after Dialog is closed 
     setVisible(false); 
     dispose(); // <-- Important 
    } 
}); 

मेरा प्रश्न है मेरा मतलब है, लाइन MyDialog.Response dialogResponse = d.getDialogResponse(); उचित मान देता है, लेकिन ... यदि मैं निपटान() का उपयोग करके संवाद बंद करता हूं, तो सभी संवाद संसाधनों को कचरा इकट्ठा किया जा सकता है (भविष्यवाणी करना मुश्किल नहीं है, क्या मैं सही हूँ?) । तो क्या यह मेरे संवाद की प्रतिक्रिया को इस तरह से पुनर्प्राप्त करना सही है ... शायद इस मामले में मुझे dispose() के बिना केवल setVisible(false); लिखना चाहिए।

+0

यदि आपको अपने 'जेडियलॉग' की आवश्यकता है तो इसे बाद में निपटाना न करें और केवल 'सेट विज़िबल (झूठा)' का उपयोग करें, अन्यथा आप इसे बिना किसी समस्या के निपटान कर सकते हैं – Paniz

+0

मुझे यकीन नहीं है कि मैं समझता हूं, इसलिए टिप्पणी नहीं कर सकता आप फ्रेम से संवाद का निपटान करते हैं? – npinti

+0

@npinti हां, लेकिन मैं मुख्य रूप से उत्सुक हूं यदि मैं डायलॉग –

उत्तर

7

Javadocs से उद्धरित:

खिड़की और उसके उप-घटक फिर से प्रदर्शन योग्य बनाया जा सकता है पैक करने के लिए बाद में एक कॉल या शो के साथ देशी संसाधनों के पुनर्निर्माण द्वारा। पुनर्निर्मित विंडो और उसके उपमहाद्वीप के राज्य इस बिंदु के उन राज्यों के समान होंगे जहां विंडो को (उन कार्रवाइयों के बीच अतिरिक्त संशोधनों के लिए लेखांकन नहीं) का निपटारा किया गया था।

तो, आपका जवाब रखा जाएगा। सभी dispose() देशी स्क्रीन संसाधनों को जारी कर रहा है, अन्य सदस्यों को कचरा संग्रह के लिए चिह्नित नहीं किया गया है।

इसके अलावा, यदि आप अतिरिक्त सुनिश्चित होना चाहते हैं, तो आप अपनी प्रतिक्रिया वस्तु को पुनर्प्राप्त करने के ठीक बाद dispose() पर कॉल कर सकते हैं।

3

अगर मैं संवाद निपटाने का उपयोग कर() बंद करते हैं, सभी संवाद के संसाधनों कचरा एकत्र किया जा सकता है (करने के लिए ... कठिन नहीं है भविष्यवाणी करने के लिए, मैं सही हूँ?)। तो क्या यह मेरे संवाद की प्रतिक्रिया को इस तरह से पुनर्प्राप्त करना सही है ... शायद में इस मामले में मुझे केवल सेट दृश्य (झूठा) लिखना चाहिए; निपटान के बिना()।

-1

तुम क्यों वर्ग चर का उपयोग नहीं करते (निजी स्थिर या सार्वजनिक स्थैतिक) और एक फैक्टरी विधि का उपयोग करें

//it can be an object too public static Object getResponseValue() 
    public static Integer getResponseValue(){ 
    myclassContainer container = new myclassContainer(someparent,modal).setvisible(true) 
    return  Myfieldvalue 
    } 

    private static int Myfielvalue; 

} 
+0

??? स्पष्ट रूप से मुझे यहां एक हिस्सा याद आया .... कक्षा चर पर आते हैं वे अच्छे हैं, इसलिए हम उन्हें क्यों रखते हैं, कारखाने के तरीकों को जेडियोलॉग बटन जैसे स्थिरांक आपको – GoAntonio

-1
 dialog.add(BorderLayout.CENTER, tree_tmp); 
     JButton confirm = new JButton("YES"); 
     confirm.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       confirm.setActionCommand("kkk"); 
       dialog.setVisible(false); 
      } 
     }); 
     dialog.add(BorderLayout.SOUTH,confirm); 
     dialog.setSize(400, 400); 
     dialog.setVisible(true); 

     System.out.println(confirm.getActionCommand()); 
+0

कोड को पढ़ना चाहिए, केवल स्पष्टीकरण के साथ ही कोई जवाब नहीं दिया जाता है और हटा दिया जाता है। –

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