» נושאי לימוד
» נושאי לימוד
יום שני 29 באפריל 2024
מקטעי קוד מעניינים
דף ראשי  מתקדמים  Program-Generated Events and the AWTEventMulticaster Class  תכנית לדוגמה ממשית יותר  מקטעי קוד מעניינים גרסה להדפסה

מקטעי קוד מעניינים

 

חלק ניכר מהקוד בתכנית זו חוזר על קוד שכבר ראית בתכניות קודמות. בנוסף, רוב הקוד מורכב מהצהרות System.out.println() אשר נמצאות שם כדי להסביר מה קורה כאשר אתה מסתכל בפלט. בעקרו של דבר, נדלג על קוד שראית בעבר ונתרכז רק בקוד  הרלוונטי למטרה של התכנית הזאת המחשה של אירועים המחוללים ע"י תכנית עם דגש מיוחד על המחלקה  AWTEventMulticaster .

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

    NonVisual aNonVisual = new NonVisual("NonVisualObj A");
    aNonVisual.setName("NonVisualObjA");

    NonVisual bNonVisual = new NonVisual("NonVisualObj B");
    bNonVisual.setName("NonVisualObjB");

 

 

 

 

 

 

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

    aNonVisual.addActionListener(new FirstActionListener());
    bNonVisual.addActionListener(new FirstActionListener());
    bNonVisual.addActionListener(new SecondActionListener());

 

 

 

 

 

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

    aNonVisual.generateActionEvent();
    ...

    bNonVisual.generateActionEvent();

 

 

 

 

 

 

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

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

class NonVisual extends Component {
  ...
  String ID; // The ID of the object
  ActionListener actionListener;

 

 

 

 

 

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

מקטע הקוד המעניין הבא הוא הקוד הבונה את הרשימה של אובייקטים הרשומים כאובייקטי מאזין על אובייקט לא ויזואלי ספציפי. אובייקטים חדשים מוספים לרשימה ע"י קריאה למתודה add() הסטטית של המחלקה java.awt. AWTEventMulticaster והעברה אליה את משתנה המופע אשר מתייחס לרשימה יחד עם אובייקט המאזין החדש אשר יש להוסיף לרשימה. כאשר האובייקט הראשון מוסף לרשימה, מוחזרת התייחסות  לאובייקט המאזין עצמו. לפיכך, במקרה של רשימה המכילה אובייקט מאזין יחיד, ההתייחסות לרשימה היא בפשטות התייחסות לאובייקט  המאזין. כאשר מוספים אובייקטי מאזין נוספים לרשימה, התייחסות לאובייקט מטיפוס java.awt AWTEventMulticaster  מוחזר ע"י מתודת הadd() של המחלקה .AWTEventMulticaster לפי התיעוד של 1.1 JDK על המחלקה :AWTEventMulticaster "מחלקה זו תטפל במבנה של שרשרת אירועי מאזין  ((listeners ותשגר אירועים למאזינים הללו". כאשר המתודה actionPerformed() מופעלת מאוחר יותר על ההתייחסות לרשימה, המתודה תופעל או על אובייקט יחיד מסוג ActionListener או שתופעל על אובייקט מסוג  AWTEventMulticaster. במקרה השני, המתודהctionPerformed() של המחלקה WTEventMulticaster תופסת אחריות להפעלת המתודה actionPerformed() על כל האובייקטים ברשימה.

עם הקדמה ארוכה זו, מקטע הקוד המעניין אינו כה סבוך.

"This class will manage the structure of a 
chain of event listeners and dispatch events 
to those listeners."

 

 

 

 

 

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

כאשר אובייקט המאזין הראשון הוסף לרשימה, ההתייחסות היתה לאובייקט עצמו. כאשר אובייקט המאזין השני הוסף לרשימה, ההתייחסות היתה  ל java.awt  AWTEventMulticaster@1cc799 . חלק מהפלט מהתכנית הממחיש התנהגות זו מובא להלן (יחד עם כמה החזרות ערך קשות אשר הוחדרו ידנית) .

 

 

actionListener = AWTEventMulticaster.add(actionListener, listener);

 

 

 

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

 

addActionListener() method invoked
NonVisualObj B:   Listener to add is: FirstActionListener@1cc761
Invoke AWTEventMulticaster.add() to get reference to ActionListener
NonVisualObj B:   Ref to ActionListener is: FirstActionListener@1cc761


addActionListener() method invoked
NonVisualObj B:   Listener to add is: SecondActionListener@1cc783
Invoke AWTEventMulticaster.add() to get reference to ActionListener
NonVisualObj B:   
         Ref to ActionListener is: java.awt.AWTEventMulticaster@1cc799

 

 

 

 

 

 

 

 

 

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

 

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