» נושאי לימוד
» נושאי לימוד
יום שבת 27 באפריל 2024
תכנית לדוגמה שניה
דף ראשי  מתקדמים  Event Handling in JDK 1.1, Using Abbreviated Inner Classes  תכנית לדוגמה שניה גרסה להדפסה

 

תכנית לדוגמה שניה

התכנית לדוגמה השנייה זהה לראשונה, אלא שהיא עושה שימוש במחלקות אנונימיות להבזקה של אובייקטי המאזין.

 

דיון בתכנית לדוגמה השנייה

על מנת ליצור מחלקות מתאם קטנות (כמו מחלקות מאזין)  תמציתיות ככל האפשר , Java 1.1  מאפשרת  סימון מקוצר לאובייקטים מקומיים.

ביטוי יחיד משלב :

הגדרה של מחלקה אנונימית עם

הקצאה  של הבזקה.

להלן מקטע קוד מהתכנית לדוגמה השנייה הממחיש רעיון זה .

singButton.addActionListener(
      new ActionListener(){
        public void actionPerformed(ActionEvent e){
          sing();//call the sing() method
        }//end actionPerformed()
      }//end ActionListener
    );//end addActionListener()

 

 

 

 

 

 

 

במקרה זה, הקוד מגדיר מחלקה אנונימית חדשה אשר מיישמת אוטומטית את ממשק ActionListener (ללא שימוש של במלת המפתח(implements  ומבזיק אוטומטית אובייקט אנונימי של אותה מחלקה חדשה.

במקרה הזה, המילה אנונימי מציינת כי לא המחלקה ולא האובייקט בעלי שם.

בשיעורים קודמים הבזקנו אובייקטים אנונימיים ע"י שימוש באופרטור new  וקריאה לבנאי של האובייקט כחלק מביטוי כללי גדול יותר. אולם, לא עשינו כן תוך שימוש במחלקות חסרות שם.

היבט מעניין אחר של תחביר זה הוא מקטע הקוד הבא אשר נראה כקריאה לבנאי בהבזקת אובייקט טיפוסית

 

new ActionListener(){...

 

 

 

אולם, ActionListener , אינה מחלקה, אלא ממשק ומאחר וממשק אינו יכול להכיל שום מתודה מוגדרת במלואה לא נראה שיכול להיות לזה בנאי (אבל זה בכל אופן עובד). שים  לב במיוחד לעמדות של הסוגריים הפותחים והסוגרים אשר מגדירים את רשימת הארגומנטים למתודת addActionListener .

ההגדרה של המחלקה האנונימית וכמו כן ההבזקה של האובייקט האנונימי שניהם מוכללים ברשימת הארגומנטים של ()addActionListener.

מתודת ה  addActionListener מנוצלת לרישום (register) אובייקט אנונימי זה להאזין לאירועי actionPerformed()  על אובייקט הכפתור המכונה singButton. בכל פעם שמתרחש אירוע פעולה על אותו כפתור ספציפי, המתודה המועמסת actionPerformed() מפעילה את מתודת "עיבוד הנתונים" מתודה המכונה sing() . משום שזו מחלקה פנימית של המחלקה החיצונית אשר בה מוגדרת המתודה sing(), לקוד במחלקה הפנימית גישה ישירה למתודה המכונה sing() ללא הדרישה להבזיק אובייקט של המחלקה החיצונית.

כאשר עושים שימוש בתחביר המקוצר, ביטוי של האופרטור new יכול להסתיים  עם גוף המחלקה. לפי התיעוד של 1.1 JDK:

"ההשפעה של זה היא לקחת את המחלקה (או הממשק) שרשום אחרי הסימן new , ולשים אותה בתת-מחלקה (או ליישמה) עם הגוף נתון. למחלקה הפנימית האנונימית  הנוצרת אותה משמעות כאילו המתכנת הגדיר אותה מקומית עם שם בגוש הנוכחי של ההצהרות".

חשוב לשים לב כי למחלקה אנונימית יכולים להיות מאתחלים אך לא יכול להיות לה בנאי. רשימת הארגומנטים של הביטוי new הקשור מועברת במרומז לבנאי של תת-המחלקה.

עבור התכנית לדוגמא השניה המובאת בהמשך, המחלקה השולטת מכונה Event22. כקודם, מחלקה פנימית המכונה GUI מוגדרת בתוך המחלקה המכונה Event 22  ואובייקט של מחלקה זו מובזק בתוך המתודה העיקרית main().

גם כמקודם, 2 מתודות "עיבוד נתונים" המכונות sing()  ו whistle() מוגדרות בתוך המחלקה השולטת. הם מוגדרים בדרך כזו שהנם נפרדים מפעילות הטיפול באירוע חוץ מכך שהם מופעלים ע"י מתודות טיפול באירוע.

אולם, שלא כמו התכנית לדוגמא הראשונה, ציון מקוצר משומש בכדי להגדיר אנונימית את המחלקות ובכדי להבזיק 3 אובייקטי מאזין אנונימיים בתוך המחלקה הפנימית המכונה GUI. השניים הראשונים מיישמים את ממשק ActionListener בעוד השלישי מרחיב את מחלקת המתאם WindowListener .

כקודם, השניים הראשונים מעמיסים את מתודת actionPerformed() של ממשק ActionListener בעוד השלישי מעמיס את מתודת windowClosing של ממשק WindowListener.

המחלקה המכונה GUI מאריכה מסגרת. 2 אובייקטי מסגרת המתויגים Sing & Whistle מובזקים בבנאי של GUI . משתנים המכונים singButton ו- WhistleButton  מפנים אליהם בהתאמה. שני הכפתורים מוספים לאובייקט המסגרת.

שני אובייקטי המאזין האנונימיים הראשונים  המוזכרים דלעיל נרשמים להאזין לאירועי actionPerformed() על שני הכפתורים. אובייקט המאזין האנונימי השלישי נרשם להאזין לאירועי windowClosing() על אובייקט המסגרת.

כאשר התכנית מתחילה, אובייקט מסגרת המכיל את שני הכפתורים  מופיע על המסך. כאשר המשתמש מקיש על הכפתור המתויג Sing (שיר!) מטפל האירוע הרשום להאזין לאירועי פעולה על אותו כפתור מפעיל את המתודה המכונה sing()  המציגה את המסר.

"I am singing Tra la la"

כאשר המשתמש מקיש על הכפתור המתויג whistle (שרוק!) מטפל האירועים הרשום להאזין לאירועי פעולה על כפתור זה מפעיל את המתודה המכונהwhistle() המציגה את המסר:

"I am whistling Tweet, Tweet, Tweet"

כאשר המשתמש מקיש על תיבת "סגור" שעל המסגרת, מטפל האירוע הרשום להאזין לאירועי windowClosing על המסגרת מסיים את התכנית.

תוצאות אלו הופקו בהרצה ב JDK 1.1 תחת חלונות 95.

 

 18-10-03 / 00:49  נוצר ע"י רונית רייכמן  בתאריך 
 רישום תכנית של התכנית לדוגמה הראשונה - הקודםהבא - רישום תכנית לדוגמא שניה 
תגובות הקוראים    תגובות  -  0
דרכונט
מהי מערכת הדרכונט?
אינך מחובר, להתחברות:
דוא"ל
ססמא
נושאי לימוד
חיפוש  |  לא פועל
משלנו  |  לא פועל
גולשים מקוונים: 2