سؤال

لنفترض أن لدي هذا:

class external {
    JFrame myFrame;
    ...

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

createContentPane إرجاع حاوية. الآن، إذا كنت أفعل هذا الرمز خارج ActionListener سيعمل ذلك، لأنني أمكن الوصول إلى هذا. ولكن، داخلها، أنا لا. لدي الوصول إلى myFrame, ، وهذا ما سيتم تحديثه مع محتويات الطريقة، ولكن هذا لا يكفي للقيام بما أريد، إلا إذا كان بإمكاني الحصول على هذا من ذلك.

أحتاج أيضا إلى معلومات من متغيرات مثيل أخرى لاستخدامها createContentPane(), لذلك أنا لست متأكدا من أنني أستطيع أن أجعلها static.

هل كانت مفيدة؟

المحلول

يمكنك إما :

myFrame.setContentPane(createContentPane());

أو

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

بالمناسبة، في الفصول الدراسية Java الحرف الأول عادة ما تكون كبيرة. لا يزال الرمز الخاص بك لا يزال يترجم وتشغيله إذا كنت لا تسميته من هذا القبيل، ولكن باتباع اتفاقيات الترميز، ستكون قادرا على قراءة رمز الآخرين، وأكثر أهمية أكبر بكثير سيكون قادرا على قراءة التعليمات البرمجية.

لذلك سيكون هذا أسلوبا أفضل:

class External {
    JFrame myFrame;
    ...

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

اتفاقيات كود جافا

نصائح أخرى

external.this سوف تعطيك الوصول إلى مثيل الطبقة المرفوعة، إذا كان هذا ما تريد ...

لست متأكدا بالضبط ما تحصل عليه، لكن الطبقة الداخلية لديها إمكانية الوصول إلى جميع أعضاء صفها المرفق. للوصول إلى مؤشر "هذا" من الفئة المرفوعة (على سبيل المثال، لتمرير طرق أخرى) استخدم:

someMethod(External.this);

في مثالك، كنت في الواقع تعقيدها باستخدام "هذا". فيما يلي خياران يعملان:

myFrame.setContentPane(createContentPane());

أو:

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

لاحظ أنك تقوم بالفعل بالوصول إلى MyFrame بنفس الطريقة.

عليك أولا تمديد JFrame في الفصل الخارجي الخاص بك مثل هذا

class External extends JFrame {
.....
.....
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top