2009-02-24 12 views
5

अंदर से इस कॉलिंग मान लीजिए मैं इस है:एक नेस्ट जावा ActionListener

class external { 
    JFrame myFrame; 
    ... 

    class internal implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      ... 
      myFrame.setContentPane(this.createContentPane()); 
     } 
    } 
    ... 
} 

createContentPane एक कंटेनर देता है। अब, अगर मैं ActionListener के बाहर यह कोड कर रहा था तो यह काम करेगा, क्योंकि मुझे इसकी पहुंच होगी। लेकिन, इसके अंदर, मैं नहीं करता। मेरे पास myFrame तक पहुंच है, जो कि विधि की सामग्री के साथ अद्यतन किया जा रहा है, लेकिन यह जो भी मैं चाहता हूं वह करने के लिए पर्याप्त नहीं है, जब तक कि मैं इसे से बाहर नहीं निकाल पाता।

मुझे createContentPane() का उपयोग करने के लिए अन्य इंस्टेंस चर से जानकारी की भी आवश्यकता है, इसलिए मुझे यकीन नहीं है कि मैं इसे static बना सकता हूं।

उत्तर

9

आप या तो:

myFrame.setContentPane(createContentPane()); 

या

myFrame.setContentPane(external.this.createContentPane()); 

तक रास्ता, जावा कक्षाओं में पहला अक्षर आमतौर पर अपरकेस होता है। आपका कोड अभी भी संकलित और चलाएगा यदि आप इसे इस तरह नाम नहीं देते हैं, लेकिन कोडिंग सम्मेलनों का पालन करके आप अन्य कोड पढ़ सकेंगे, और अधिक महत्वपूर्ण अन्य आपके कोड को पढ़ने में सक्षम होंगे।

तो यह एक बेहतर शैली होगा:

class External { 
    JFrame myFrame; 
    ... 

     class Internal implements ActionListener { 
      public void actionPerformed(ActionEvent e) { 
       ... 
       myFrame.setContentPane(createContentPane()); 
       //Or myFrame.setContentPane(External.this.createContentPane()); 
      } 
     } 
    ... 
} 

Java Code conventions

+0

खुशी मुझे यह मिला, बस मुझे जो चाहिए (400 वें समय के लिए)। मैं सवाल को समायोजित करने के लिए प्रेरित हूं और इस जवाब को ऊपरी-केस पत्र का उल्लेख नहीं करने के लिए, क्योंकि यह सिर्फ भ्रमित और अप्रासंगिक है ... लेकिन मैं नहीं करूँगा। धन्यवाद +1 –

1

सुनिश्चित नहीं है कि आप वास्तव में क्या प्राप्त कर रहे हैं, लेकिन एक आंतरिक वर्ग के पास इसके संलग्न वर्ग के सभी सदस्यों तक पहुंच है। (उदाहरण के लिए अन्य तरीकों को पारित करने के लिए) संलग्नित क्लास के "इस" सूचक पहुँचने के लिए उपयोग:

someMethod(External.this); 

अपने उदाहरण में, आप वास्तव में यह "इस" का उपयोग करके उलझी रहे हैं।

myFrame.setContentPane(createContentPane()); 

या:

myFrame.setContentPane(External.this.createContentPane()); 

ध्यान दें कि आप पहले से ही एक ही तरीके से myFrame पहुँच बना रहे हैं यहाँ दो विकल्प है कि काम करेंगे कर रहे हैं।

+0

अरे तरह अपने बाहरी कक्षा में JFrame का विस्तार करने, मुझे 8 सेकंड हरा है; -) +1 –

+0

उनके ब्रेक :) धन्यवाद। –

2

external.this आप संलग्नित क्लास के उदाहरण के लिए पहुँच है, अगर है कि तुम क्या चाहते हो दे देंगे ...

0

सबसे पहले आप इस

class External extends JFrame { 
..... 
..... 
} 
संबंधित मुद्दे