כיצד ליצור ולהפיץ אירוע
תהליך יצירה והפצה של אירוע הוא למרבה הפלא פשוט ביותר.
אתה פשוט:
- יוצר מופע לאובייקט של המחלקה Event המכיל את המידע המתאים בשדות שלו ו-
- מפעיל את המתודה ()deliverEvent, תוך העברת אובייקט ה- Event כפרמטר.
החלק היחיד שדורש חשיבה של ממש הוא ההחלטה מה להכניס לכל אחד מהשדות של האובייקט. הפונקציות הבונות של המחלקה Event מוצגות להלן (לפי תיעוד API 1.0.2).
*****************************************************************************************************
public Event(Object target, int id, Object arg);
public Event(Object target, long when, int id,
int x, int y, int key, int modifiers);
public Event(Object target, long when, int id,
int x, int y, int key,
int modifiers, Object arg);
****************************************************************************************************
אין הכרח להכניס מידע תקף בכל אחד מן השדות באובייקט. כל שעליך לעשות הוא להכניס מידע לאותם שדות שישמשו את המטפל באירועים עבור האירוע.
שלוש הגירסאות המועמסות האלה של הפונקציה הבונה מאפשרות לך להכניס מידע בתת-קבוצות נבחרות של שדות כדי לתמוך במטפל באירועים שיופעל כאשר אובייקט ה- Event מופץ.
במקרים מסוימים באפשרותך להכניס מידע "בדוי" בשדה אם אתה יודע שהמטפל באירועים לא יעשה שימוש במידע מהשדה הזה.
לדוגמה, בתוכנית ההדגמה המופיעה בשלב מאוחר יותר של שיעור זה, אנו מכניסים מחרוזת בדויה בשדה arg מכיוון שאנו יודעים שהמטפל באירועים לא ישתמש במידע מהשדה הזה.
לשם חזרה על חומר שלמדנו משיעור קודם, לפי תיעוד ה-API 1.0.2 , מפורטים להלן השדות של האובייקט ומטרותיהם:
- arg - ארגומנט שרירותי של האירוע. הערך של שדה זה תלוי בטיפוס האירוע.
- clickCount - עבור אירועי MOUSE_DOWN, שדה זה מציין את מספר הלחיצות הרציפות. באירועים אחרים, הוא שווה אפס.
- evt - האירוע הבא. שדה זה מוגדר כאשר מכניסים אירועים לרשימה מקושרת.
- id - טיפוס האירוע.
- המקש עליו לחצו באירוע של לוח המקשים.
- modifires מצב מקשי ה- modifier
- target רכיב המטרה. מציין את הרכיב שעליו הופעל האירוע או שאליו משויך האירוע.
- when חותמת הזמן של האירוע.
- x קואורדינטת ה- x של האירוע.
- y קואורדינטת ה- y של האירוע.
לכן, כדי ליצור ולהפיץ אירוע:
- בחר בפונקציה הבונה התומכת בשילוב השדות המתאים ביותר לצרכים של מטפל
באירועים שיטפל באירוע,
- צור מופע לאובייקט של המחלקה Event , תוך העברת המידע הדרוש לפרמטרים
שבפונקציות הבונות, ו-
- הפעל את המתודה ()deliverEvent כדי להפיץ את האירוע.
זכור כי המתודה postEvent() יכולה גם היא לשמש למטרה זו, ואני אשאיר לסטודנטים את המשימה של גילוי התכונות הדימיון, ההבדלים, והקשר בין שתי המתודות האלה.
רמז: עיין בתיעוד ה- API מתוך JavaSoft.
שדות קריטיים (Critical Fields)
שניים מהשדות באובייקט ה- Event ויש לזהות אותם נכון בכל המקרים, אחרת האירוע לא יופעל על שום דבר( זה יהיה כמו אירוע מטיפוס בלתי מוגדר וללא שום מקום מוגדר להגיע אליו):
- השדה target
- השדה id
שדה ה – id משמש לציון טיפוס האירוע באמצעות הקבועים התוויים המוגדרים במחלקה Event שהוצגו באחד בשיעורים הקודמים. (אמנם לא מומלץ, אך ניתן להשתמש בערכי integer כדי לציין את טיפוס האירוע אם אתה יודע את הערך הנכון עבור ה- integer).
שדה ה- target משמש את המערכת כדי להחליט למי מהרכיבים יישלח אובייקט ה- Event.
לדוגמה, כדי לעשות הדמיה של לחיצה על רכיב Button מסוים,
עליך ליצור אובייקט Event מטיפוס ACTION_EVENT
כשאובייקט ה- Button הספציפי מצוין כ target.