קטעי קוד מעניינים
קטע הקוד המעניין הראשון הוא הגדרת המחלקה ממנה יוכלו להיווצר אובייקטים מסוג האירועים החדש.( הגדרת המחלקה כולה מופיעה בקובץ
class CustomEvent extends EventObject{ String id;//instance variable for an object of this type //-------------------------------------------------------- CustomEvent(Object obj, String id){//constructor super(obj);//pass the Object parameter to the superclass this.id = id;//save the String parameter }//end constructor //-------------------------------------------------------- //method to return the saved String parameter String getCustomID(){ return id; }//end getCustomID }//end class CustomEvent |
כפי שאתה יכול לראות מחלקה זו מגיעה ל java.util.EventObject. הבנאי לאובייקט ממחלקה זו מקבל שני פרמטרים. הפרמטר הראשון הוא התייחסות (reference) לאובייקט המייצר את האירוע. פרמטר זה מועבר לבנאי של מחלקת העל EventObject שם הוא מאוחסן לצורך גישה מאוחרת יותר של מתודת getSource() של המחלקה EventObject.
הפרמטר השני היא מחרוזת מידע זיהוי המועבר לבנאי כאשר אובייקט מסוג CustomEvent מיוצר. בתוכנית זו מחרוזת המידע, היא פשוט אובייקט מסוג מחרוזת המאוחסן כמשתנה דוגמא באובייקט המקור, כאשר הוא נוצר. באופן וירטואלי אתה יכול להעביר כל פקודת מידע או מידע לזיהוי בצורה זו. מחרוזת המידע מאוחסנת כמשתנה דוגמא באובייקט . CustomEvent.
המחלקה מייצרת גם מתודת עזר המחזירה את המחרוזת המאוחסנת כמשתנה לדוגמא באובייקט.
קטע הקוד המעניין הבא הוא הגדרת מנשק Listner חדש הנקרא CustomEventListener המגיע ל EventListener. מנשק זה מגדיר מתודה הנקראת customEventTrapped(). זוהי מתודת העיבוד הראשית של אובייקטי Listner ממחלקה זו. במהלך מתודה זו אירועים משוגרים לאובייקטי listner.
interface CustomEventListener extends EventListener{ void customEventTrapped(CustomEvent e); } |
קטע הקוד המעניין הבא מממש את המנשק הנ"ל ומגדיר מחלקת Listner לאירועים מהסוג החדש. זוהי מחלקת Listner plain-vanilla, המפעילה את מתודת customEventTrapped() המוגדרת במנשק. המתודה המפעילה משתמשת במתודות העזר כדילגשת ולהציג את מחרוזת המידע והזיהוי של אובייקטי המקור, מאובייקט CustomEvent.
class CustomEventListenerClass implements CustomEventListener{ public void customEventTrapped(CustomEvent e){ System.out.println( "customEventTrapped() method invoked on " + e.getCustomID()); System.out.println("Source of event was " + e.getSource()); }//end customEventTrapped }//end class CustomEventListenerClass |
קטע הקוד המעניין שנותר נמצא בהגדרת מחלקה שנועדה לייצר אירועים מהסוג החדש. מחלקה זו דומה מאד למחלקה שפותחה בשיעור קודם “program-generated events”. כפי שצוין קודם, תוכנית בסיסית זו יכולה לתמוך רק באובייקט Listner אחד הרשום בכל קובץ מקור של event-generating.
נתחיל בתחילת ההגדרה של המחלקה המראה כי המחלקה מגיעה לרכיבים ומשמרת שני משתנים לדוגמא. אחד מהמשתנים לדוגמא הוא ,String ID מידע המאותחל ע"י הבנאי. המשתנה לדוגמא האחר הוא התייחסות לאובייקט Lustner הרשום באובייקט המקור. קוד המקור פשוט מדי מכדי שנתייחס אליו בחלק זה.
class NonVisual extends Component { String ID; // The ID of this object //Reference to single Listener object CustomEventListenerClass customListener; |
קטע הקוד המעניין הבאהוא הקוד שרושם למעשה אובייקט Listner. קוד זה דומה מאד לקוד בשיעור הקודם מלבד העובדה שקוד זה לא משתמש במתודה AWTEventMulticaster.add() כדי ליצור ולשמר רשימה של אובייקטי Listner רשומים.
קוד זה תומך באובייקט Listner אחד בלבד ומכיל לוגיקה לסיום התוכנית אם נעשה ניסיון לרשום יותר מאובייקט Listner אחד.
public void addCustomEventListener( CustomEventListenerClass listener){ //Do not attempt to add more than one Listener object. if(customListener == null) customListener = listener;//one listener only else{ System.out.println( "No support for multiple Listener objects"); //terminate on attempt to register multiple listeners System.exit(0); } }//end addCustomEventListener() |
קטע הקוד המעניין הבא היאהמתודה שמשגרת בפועל אירוע מהסוג החדש. במקרה זה השיגור מושג ע"י פנייה למתודת customEventTrapped() של אובייקטי Listner הרשומים והעברת אובייקט מסוג CustomEvent כפרמטר. גם קוד זה זהה כמעט לקוד בשיעור הקודם וזו דרך שגרתית לשגר אירועים ב 1.1 JDK.
public void generateCustomEvent() { customListener.customEventTrapped( new CustomEvent(this, ID)); }//end generateCustomEvent |
קטעי קוד אלו הדגימו את הרכיבים החיוניים ליצירת, לכידת ועיבוד סוג אירוע טיפוסי חדש. בחלק הבא מובא רישום מלא של התוכנית.