2012-09-10 7 views
5

सार: मैं बजाय स्थानीय स्तर पर की ग्रहण विंडो बिल्डर के कोड जनरेटर कॉन्फ़िगर करने के लिए initalize() विधि में वर्ग शरीर में अपनी वस्तु संदर्भ जगह के लिए एक रास्ता तलाश कर रहा हूँ ।को नियंत्रित जहां जीयूआई वस्तुओं ग्रहण विंडो बिल्डर द्वारा बनाई गई के लिए संदर्भ रखा जाता है

विस्तृत:

विंडो बिल्डर एक कोड जनरेटर/कोड विश्लेषक जिसकी वजह से 'ग्राफ़िकल रूप डिजाइनर' और इसके विपरीत से जीयूआई कोड उत्पन्न कर सकते में बनाया गया है। जीयूआई को जल्दी से डिजाइन करने और जावा में विभिन्न ढांचे का काम करने के लिए यह बहुत अच्छा उपयोग है (विशेष रूप से जावा शुरुआती लोगों के लिए)। हालांकि, मुझे अधिक परिष्कृत जीयूआई सेटअप की ओर बढ़ते समय मेरे डिजाइन में जेनरेट कोड का उपयोग करने में परेशानी हो रही है। समस्या यह है कि अधिकांश जेनरेट कोड initialize() विधि के अंदर रखा जा रहा है जो ऑब्जेक्ट को स्थानीय दायरे में निवासी बनाता है और 'बाहरी' से संदर्भ प्राप्त करने में कठोर बनाता है।

अब तक मैं किया गया है कॉपी/सार्वजनिक रूप में मैन्युअल वर्ग शरीर में initialize() विधि से प्रकार घोषणाओं चिपकाने उन तक पहुंच के लिए, लेकिन यह किसी भी तरह गलत दृष्टिकोण लगता है। जब तक मैं ग्राफिकल डिजाइनर के भीतर से जीयूआई को पुनर्गठित नहीं करता तब तक यह ठीक काम करता है। उस स्थिति में कोड जनरेटर initialize() विधि में फिर से इसकी घोषणाओं को प्रस्तुत करता है।

स्वचालित रूप से तैयार किए गए कोड इस तरह दिखता है:

// AUTO-GENERATED CODE 
    public class MyGUI { 
     private void initialize() { 
      // gui objects declared AND created in this scope by Window Builder 
      JFrame frame = new JFrame(); 
      JPanel panel_1 = new JPanel(); 
      frame.getContentPane().add(panel_1); 
    } 
    } 

क्या मैं चाहते हैं: (उस पर दुर्लभ प्रलेखन)

public class MyGUI { 
      // accessible from outside 
      public Frame frame = null; 
      public JPanel panel_1 = null; 

     private void initialize() { 
      // gui objects only created in this scope 
      frame = new JFrame(); 
      panel_1 = new JPanel(); 
      frame.getContentPane().add(panel_1); 
    } 
    } 

मैं एक समाधान के लिए दस्तावेज में तलाश रहे हैं, और विभिन्न विंडो बिल्डर वरीयताओं का भी अध्ययन किया लेकिन अब तक कोई भाग्य नहीं है। 'डेटा बाध्यकारी' है लेकिन ऐसा लगता है कि एमवीसी (गुई तत्वों को एक मॉडल में बांधें) और काफी अधिक मात्रा में लागू होता है।

क्या कोई डिज़ाइन पैटर्न है जो मुझे याद आ रहा है, या क्या मुझे किसी भी तरह initialize() के स्थानीय दायरे से संदर्भों को 'मछली' करना चाहिए?

उत्तर

2

प्राथमिकता विंडो में, विंडोबिल्डर और स्विंग (या एसडब्ल्यूटी) का विस्तार करें और फिर कोड जनरेशन का विस्तार करें। क्लास-स्तरीय फ़ील्ड के रूप में स्थानीय स्तर पर वैरिएबल घोषित करने के विकल्प हैं, और आलसी शुरुआत में। आप फ्लैट या ब्लॉक स्टेटमेंट भी चुन सकते हैं। क्या देखने के लिए are some examples in the documentation under WindowBuilder Pro User Guide > Preferences > Swing है।

+0

धन्यवाद, यह वही है जो मैं ढूंढ रहा था। क्या आप उस विषय को इंगित कर सकते हैं जहां यह दस्तावेज है। मैं डॉक्टर को देख रहा हूं, लेकिन इसे नहीं मिला। – count0

+0

@ count0 विंडोबिल्डर प्रो उपयोगकर्ता मार्गदर्शिका> प्राथमिकताएं> स्विंग - आप पृष्ठ के बाईं ओर नेविगेट कर सकते हैं। मैं इसे अपने प्रश्न में संपादित करूंगा - मेरा इरादा सीधे इस पृष्ठ पर जाने का लिंक है। –

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