תוכנית דוגמא 2
תוכנית זו ממשיכה להדגים את השימוש במאזין אבות על Jbutton.
חשוב מכך, תוכנית זו מדגימה את העובדה החשובה ביותר והיא שאובייקטים של Jbutton הם מכלים אשר יכולים להכיל אובייקטים אחרים, הכוללים את אובייקט Jbutton.
תוכנית זו מערימה שלושה אובייקטים שלJbutton אחד על השני כאשר המחסנית של שלושת האובייקטים ממוקמת על אובייקט Jframe. אובייקטים של ActionListener נרשמים על כל אחד מהכפתורים על מנת לתפוס את האירוע actionPerformed() כאשר ישנה לחיצה על הכפתור,
ועל מנת להציג את מוצא האירוע.
אובייקטים של AncestorListener גם כן נרשמים על כל שלושת האובייקטים של Jbutton.
הרצת תוכנית זו ולחיצה זהירה על כל אחד מהכפתורים ברצף ממעלה המחסנית ועד לתחתית המחסנית, ואז הזזת אובייקט ה- Jframe על המסך, מפיקים את הפלט הבא. שים לב שמספר שורות ריקות הוכנסו ידנית על מנת להקל על המעקב אחר החומר.
Make JFrame visible In ancestorMoved method In ancestorMoved method In ancestorMoved method In actionPerformed method In ancestorMoved method |
תוכנית זו נבדקה תוך שימוש ב- JDK 1.1.6 ו- Swing 1.0.1 תחת Win95.
חלקי קוד מעניינים עבור תוכנית דוגמא 2
מחלקת הבקרה ופונקצית main() זהות לתוכנית הקודמת, ולכן הושמטו למען הקיצור.
הרבה מקוד הבנאי עבור מחלקת GUI גם כן זהה לתוכנית הקודמת ולכן הושמט מן הרישום להלן עבור הקיצור.
שים לב לשימוש ב- getContentPane() בזמן הכוונת מנהל התצוגה כפי שתואר קודם.
שלושה אובייקטים של Jbutton מאותחלים. אחר כך שלושת האובייקטים נערמים על ידי הוספת כפתור שני (secondButton) לכפתור ראשון (firstButton) ואז הוספת כפתור שלישי (thirdButton) לכפתור שני.
אובייקט ancestor listener רשום על גבי שלושת הכפתורים ולאחר מכן אובייקט actionListener נרשם על גבי שלושת הכפתורים.
שאר הבנאי הוא כמו הקודם והוסר למען הקיצור.
class GUI { JButton firstButton = new JButton("First Button"); firstButton.add(secondButton); firstButton.addAncestorListener( firstButton.addActionListener(new MyActionListener()); //...snip |
מחלקת ancestorListener מאד דומה לגרסה הקודמת, ולכן הגדרת פונקציה אחת בלבד מוצגת בחלק הבא.
שים לב לדרישה להשלכה מטה בגרסה זו של הפונקציה. זאת מכיוון שקריאת פונקצית getSource() מחזירה אובייקט מסוג Object ויש לעשות השלכה לסוגJbutton בכדי שיהיה שימושי במקרה זה.
class MyAncestorListener implements AncestorListener{ //...snip }//end class MyAncestorListener |
לבסוף, נבחן את מחלקת ActionListener אשר תופסת אירועי פעולה על הכפתורים כאשר הם נלחצים ומציגה פלט הולם על גבי המסך.
class MyActionListener implements ActionListener{ |