» נושאי לימוד
» נושאי לימוד
יום שני 29 באפריל 2024
קטעי קוד מעניינים
דף ראשי  מתקדמים   CardLayout  תוכנית לדוגמא  קטעי קוד מעניינים גרסה להדפסה

 

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

 

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

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

 

    Label timeLabel = new Label(
            "__________________________________________");
    Button timeButton = new Button("Display Date and Time");
    Panel timePanel = new Panel();
    timePanel.add(timeButton);
    timePanel.add(timeLabel);
    
    timeButton.addActionListener(
                         new TimeActionListener(timeLabel));

 

 

 

 

 

 

 

 

 

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

 

    CardLayout myCardLayout = new CardLayout();

 

 

 

אחר כך אנחנו : נבזיק את אובייקט הפנל שלנו,

נתאר את מנהל השרטוט שלו

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

 

    Panel displayPanel = new Panel();
    displayPanel.setLayout(myCardLayout);
    displayPanel.setBackground(Color.yellow);

 

 

 

 

 

ברגש שאובייקט פנל התצוגה קיים, הצעד הבא הוא להוסיף את הכרטיסים לפנל תוך שימוש במנהל שרטוט כרטיס. בשימוש הבא במתודת add() ממחלקת ה Containaer (מיכל), הפרמטר הראשון הוא האובייקט שיש להוסיף והפרמטר השני הוא שם האובייקט. כל האובייקטים האלו מלבד אחד, נוספים כאובייקטים אנונימיים וזה בסדר כיוון שהם אובייקטים פאסיביים (לא רשומים עליהם אובייקטי מאיון לפעולה). האובייקט הלא אנונימי הוא אובייקט ה timePanel (פנל הזמן), שנבנה קודם לכן בתוכנית. הוא אינו יכול להיות אנונימי  כיוון שהוא מרוכב מאובייקט פנל, אובייקט כפתור ואובייקט תווית. משתנה המתייחס לפנל היה דרוש כדי לבנות אותו. שם האובייקט המצויין כמחרוזת בפרמטר השני במתודת add() ישמש בתוכנית לדוגמא שלנו כפרמטר לפונקציה show(), שבעזרתה כרטיס מסויים נעשה נראה לעין (מובא לראש החבילה). בבקשה שים לב שהחלטתי כי הקוד ישתמש בפונקציה add() במקטע הבא בעיקר ע"י ניסוי וטעייה. ב 3.8.97 לא הצלחתי למצוא מידע וודאי על איך צריך להוסיף אובייקטים למיכל JDK 1.1 תחת מנהל שרטוט כרטיס מבלי להשתמש במתודות מנוגדות מ JDK 1.0. הקוד המובא בהמשך נראה כקוד נכון (הוא עובד"), אבל עד כמה שאני יכול לומר הוא לא מופיע בתיעוד של JDK 1/1. חיפשתי מידע באחת מקבוצות החדשות בנושא java ובתקווה אוכל לעדכן שיעור זה כך שיהיה יותר מוחלט בנוגע לקוד זה מאוחר יותר

 

displayPanel.add(new Button(
                "First card is a Button object"),"first");
displayPanel.add(new Label(
               "Second card is a Label object"),"second");
displayPanel.add(new Label(
            "Third card is also a Label object"),"third");
displayPanel.add(new Label(
               "Fourth card is a label object"),"fourth");
displayPanel.add(
   timePanel,"time panel");//special panel defined earlier
displayPanel.add(new TextField(
              "Last card is a TextField Object"),"sixth");

 

 

 

 

 

 

 

 

 

 

 

 

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

 

    Button nextButton = new Button("Next");

    firstButton.addActionListener(
            new FirstListener(myCardLayout,displayPanel));

 

 

 

 

 

 

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

 

    Panel controlPanel = new Panel();
    controlPanel.add(firstButton);

 

 

 

 

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

 

    Frame myFrame = new Frame(
                            "Copyright 1997, R.G.Baldwin");
    
    myFrame.add(displayPanel,"North");
    myFrame.add(controlPanel,"South");

 

 

 

 

 

 

זה משלים את קטעי הקוד המעניינים ממחלקת ממשק המשתמש (GUI).

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

 

      public void actionPerformed(ActionEvent e){
        myLabelObject.setText(new Date().toString());  
      }//end actionPerformed()

 

 

 

 

 

 כפי שאתה רואה מתודה מועמסת זו מבזיקה מופע חדש של מחלקת תאריך (Date)  בכל פעם שמובזק מופע של המחלקה תאריך, הוא מכיל מידע, שבו אפשר להשתמש כדי לקבוע את השעה והתאריך בו הוא הובזק. מידע זה מחולץ תוך שימוש במתודה toString() ומשמש יחד עם המתודה setText() של מחלקת התווית כדי להפקיד את מידע התאריך והשעה באובייקט התווית. לאחר הגדרת מחלקה זו ישנן חמש מחלקות מאזין לפעולה מאד דומות. משתמשים בהן כדי לדפדף בחבילת הכרטיסים בכל פעם שאחד מאובייקטי הכפתור בפנל הבקרה נלחץ. הגדרות מחלקות אלו כמעט זהות והשוני בינהן הוא רק בתנאים בהם נקראת המתודה המועמסת actionPerformed().

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

 

    myCardLayoutObject.first(myPanelObject);
    myCardLayoutObject.next(myPanelObject);
    myCardLayoutObject.previous(myPanelObject);
    myCardLayoutObject.last(myPanelObject);
    myCardLayoutObject.show(myPanelObject,"time panel");

 

 

 

 

 

 

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

 

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