2013-04-29 6 views
5

मैं एक जावा/स्विंग जीयूआई परियोजना में निम्नलिखित कोड देखें:यह स्विंग कोड कैसे काम कर रहा है?

MyDialog dlg = new MyDialog(parent, isFizz); 
MyDialogResults results = dlg.getResults(); 

eventBus.fireEvent(new MyDialogEvent(results)); 

उपरोक्त कोड में, MyDialog extends JDialog। तो स्पष्ट रूप से, एक बाल संवाद का निर्माण किया जा रहा है (और किसी भी तरह से अंतिम उपयोगकर्ता को दिखाया गया है), और फिर जब उपयोगकर्ता संवाद से बाहर निकलता है (ठीक या कुछ अन्य बटन क्लिक करके), results बीन का उपयोग घटना पर एक नई घटना को आग लगाने के लिए किया जाता है बस।

लेकिन मैं दो बातों के साथ संघर्ष कर रहा हूँ:

  1. वास्तव में कैसे/है, जहां जावा कहा जा रहा है आकर्षित करने के लिए/उपयोगकर्ता के लिए संवाद दिखाने ?; और
  2. बस को ईवेंट को फायर करने से पहले जावा को कैसे/कहाँ संवाद से बाहर निकलने के लिए कहा जा रहा है?

यह है कि एक JDialog बच्चा हमेशा संवाद दिखाई देगा जब JDialog बनाई गई है, और निर्माता से वापस नहीं जब तक संवाद से बाहर निकल गया है? यहाँ से MyDialog निर्माता hte का सारांश है:

public class MyDialog extends JDialog { 
    private boolean isFizz; 
    private MyDialogResults results; 

    // Getters and setters for all properties... 

    public MyDialog(Frame parent, boolean isFizz) { 
     super(parent, "My Dialog", true); 

     setIsFizz(isFizz); 

     setVisible(true); 
     dispose(); 
    } 
} 

समझ के साथ किसी भी मदद/अंतर्दृष्टि के लिए अग्रिम धन्यवाद कैसे संवाद खुले, "रुक जाता है" (हालांकि मैं जानता हूँ कि इसकी वास्तव में नहीं लटका दिया/जमे हुए), बंद कर देता है, और फिर घटना को आग लगती है।

उत्तर

1

1)

setVisible(true); 

2)

super(parent, "My Dialog", true); 

अधिक जानकारी के लिए JDialog के लिए Javadocs पढ़ें।

सबसे अधिक प्रासंगिक हैं:

+0

धन्यवाद @ एंड्रयू थॉम्पसन (+1) - हालांकि # 2 के लिए मैं अभी भी उलझन में हूं। [कन्स्ट्रक्टर जावाडोक] के अनुसार (http://docs.oracle.com/javase/7/docs/api/javax/swing/JDialog.html#JDialog%28java.awt.Dialog,%20java.lang.String,% 20boolean% 29) केवल 'मोडल' को सही करने के लिए सेट करें "दिखाए जाने पर अन्य शीर्ष-स्तरीय विंडो में उपयोगकर्ता इनपुट ब्लॉक करता है"। लेकिन यह वही नहीं है जैसा मैं यहां वर्णन कर रहा हूं। मुझे विश्वास नहीं है कि कोड की अगली पंक्ति ('MyDialogResults परिणाम = dlg.getResults();') को निष्पादित करने तक निष्पादित करने से रोक देगा, क्योंकि यह "उपयोगकर्ता इनपुट" नहीं है। –

+1

सुपर कॉल में "सत्य" संवाद मोडल बनाता है। इसका मतलब है कि 'सेट विज़िबल (सत्य)' पर कॉल तब तक वापस नहीं आएगा जब तक कि संवाद बंद नहीं हो जाता। –

+0

* "" दिखाए जाने पर अन्य शीर्ष-स्तरीय विंडो में उपयोगकर्ता इनपुट अवरुद्ध करता है "* ..और निष्पादन से अगली कोड लाइन को रोकता है (इसमें क्या जोड़ा जाना चाहिए)। –

1

Dialog.setVisible() के लिए विधि है कि संवाद और ब्लॉक से पता चलता है जब तक संवाद को बंद कर दिया जाता है। documentation for Dialog देखें। निपटान() तो संवाद वस्तु को नष्ट कर देता है।

तो आपका अनुमान आंशिक रूप से सही था। कन्स्ट्रक्टर संवाद दिखा रहा है, इसे बंद होने तक अवरुद्ध कर रहा है, और उसके बाद संवाद को बाद में नष्ट कर रहा है। हालांकि, यह "MyDialog" की विशेषता है, जेडीअलॉग

+0

जब तक डीएलजी इंस्टेंस दायरे से बाहर नहीं जाता तब तक संवाद नष्ट नहीं होता है। यही कारण है कि उपयोगकर्ता ठीक बटन दबाए जाने के बाद आप संवाद से मूल्य पुनर्प्राप्त कर सकते हैं। संवाद कन्स्ट्रक्टर लाइन के बाद भी रद्द करें बटन के लिए एक चेक होना चाहिए। –

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