دعوة هذا من داخل java actionlistener المتداخلة
-
06-09-2019 - |
سؤال
لنفترض أن لدي هذا:
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 {
.....
.....
}