תכנית לדוגמא שניה
לתכנית זו יש יותר חומר מהקודמת בשיעור זה, על אף שגם היא לא עושה דבר שימושי במיוחד . היא מעוצבת פשוט להמחיש היבטים נוספים של השימוש במחלקת BorderLayout כמנהל שרטוט.
דיון
חמישה כפתורים מוספים למסגרת תוך שימוש באובייקט BorderLayout כמנהל השרטוט עם פער של שלושה פיקסלים בין רכיבים גם בכיוון האופקי וגם באנכי.
אובייקט actionlistener מובזק ונרשם להאזין לאירועי פעולה על כל חמשת הכפתורים, כאשר כל חמשת הכפתורים חולקים את אותו מתחזק אירועי פעולה .
התנהגות מתחזק אירועי הפעולה היא להעלות את הריווח בין רכיבים ב5 פיקסלים בכל פעם שכל אחד מהכפתורים נלחץ . זה מושג ע"י:
הגברת ייחוסי Vgap & Hgap של אובייקט ,BorderLayout
הכנת מנהל השרטוט של המסגרת לאובייקט BorderLayout ששונה,
נתינת תוקף למסגרת.
צעד נתינת התוקף נחוץ על מנת שהשינוי ישפיע ויהפוך גלוי לעין.
אם אתה מקיש על הכפתורים שוב ושוב שלושה מהכפתורים יתכווצו ויצאו לגמרי מכלל ראייה . ניתן לעשות כך שייראו שוב ע"י הגדלה של המסגרת באורח פיזי.
אובייקט מאזין של אירוע windowClosing() מובזק ונרשם על המסגרת כדי לסיים את התכנית כאשר המסגרת נסגרת.
התכנית נבחנה תוך שימוש ב1.1 JDK בהרצה תחת Win95.
מקטעי קוד מעניינים
שלוש ההצהרות במקטע הקוד הבא
מבצעות:
הבזק אובייקט מסגרת,
הבזק אובייקט BorderLayout עם פער של שלושה פיקסלים בין רכיבים גם בכיוון האופקי וגם באנכי
וכונן את אובייקט ה BorderLayout הזה כמנהל השרטוט עבור אובייקט המסגרת..
Frame myFrame = new Frame( "Copyright 1997, R.G.Baldwin"); BorderLayout myBorderLayout = new BorderLayout(3,3); myFrame.setLayout(myBorderLayout); |
ההצהרה הבאה אופיינית להבזקת חמישה אובייקטי כפתור.
Button button1 = new Button("South"); |
הצהרה הבאה אופיינית להוספת את כל חמשת אובייקטי הכפתור לאובייקט המסגרת.
myFrame.add(button1,"South"); |
ההצהרות הבאות משמשות להבזקת אובייקט מאזין לפעולה ולרושמו להאזין לאירועי פעולה על כל חמשת הכפתורים .
MyActionListener myActionListener = new MyActionListener(myBorderLayout,myFrame); button1.addActionListener(myActionListener); |
הקוד הבא במתחזק האירוע actionPerformed() משתמש במתודות של BorderLayout והן:getHgap(),setHgap(), getVgap(), setVgap() לשנות את תכונות הפער האנכי והאופקי של אובייקט BorderLayout.
אחר כך אובייקט ה BorderLayout ששונה מנוצל בצירוף עם setLayout() על מנת לגרום לאובייקט BorderLayout ששונה להפוך למנהל השרטוט עבור אובייקט המסגרת. (שים לב שמנהל השרטוט עבור אובייקט המסגרת עובר שינוי בזמן הרצה).
ואז משתמשים במתודת ה validate() בכדי לאלץ את אובייקט המסגרת לסגל את הגודל החדש והמיקומים החדשים של רכיביו ולהציג את הגרסה החדשה של עצמו .
public void actionPerformed(ActionEvent e){ myBorderLayoutObject.setHgap( myBorderLayoutObject.getHgap() + 5 ); myBorderLayoutObject.setVgap( myBorderLayoutObject.getVgap() + 5 ); myFrameObject.setLayout(myBorderLayoutObject); myFrameObject.validate(); }//end actionPerformed() |