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

תכנית לדוגמא

 

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

 

דיון

 

תכנית זו מעוצבת להידור ולהרצה תחת 1.1.JDK

ממשק המשתמש של הרמה העליונה מורכב מאובייקט מסגרת . 2 אובייקטי ( Panel) פנל מוצבים על אובייקט המסגרת תוך שימוש במנהל ה BorderLayout (סידור גבול) עבור אובייקט המסגרת.

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

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

אובייקט הפנל האחר מכיל שני אובייקטי כפתור המתויגים 3X2 ו 2X3.

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

כאשר המשתמש מקיש על הכפתור המתויג 2X3 הכפתורים על אובייקט הפנל האחר מאורגנים מחדש לתוך שלוש שורות ושתי עמודות.

באותו אופן כאשר המשתמש מקיש על הכפתור המתויג 3X 2 הכפתורים על אובייקט הפנל האחר מאורגנים מחדש לתוך שתי שורות ושלוש עמודות.

אובייקט מאזין לאירוע windowClosing() מובזק ונרשם על אובייקט המסגרת כדי לסיים את התכנית כאשר המסגרת נסגרת.

התכנית נבחנה תוך שימוש ב 1.1 JDK בהרצה תחת חלונות 95.

 

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

 

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

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

 

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

 

    Button button7 = new Button("3x2");
    Button button8= new Button("2x3");  

 

 

 

 

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

 

GridLayout myGridLayout = new GridLayout(2,3);//row, col

 

 

 

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

לאחר מכן, אנו נשתמש  ב לולאת for  להניח 6 אובייקטי כפתור אנונימיים על הפנל. בתכנית זו זה בסדר שהכפתורים הללו אנונימיים משום שאין בכוונתנו לרשום כל סוג של מאזיני אירוע על הכפתורים.  אולם, בדרך כלל, אתה כן תרצה לרשום מאזין  אירוע אחד או יותר על אובייקט כפתור, כך שבדרך כלל הם לא יהיו אנונימיים. שים לב כי הכותרת של כל כפתור נבנית ע"י שרשור cnt לbutton  (כפתור). שים  לב גם  כי משתנה ההתייחסות panel1 מוגדר קודם לכן כמשתנה מופע של מחלקת GUI משום שמאוחר יותר יהיה צורך לגשת אליו ע"י מאזין הפעולה .

 

    panel1 = new Panel();
    panel1.setLayout(myGridLayout);

    for(int cnt = 0; cnt < 6; cnt++)
      panel1.add(new Button("Button" + cnt));

 

 

 

 

 

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

 

    Panel panel2 = new Panel();
    panel2.add(button7);
    panel2.add(button8); 

 

 

 

 

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

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

 

 

 

 

 

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

 

    button7.addActionListener(
       new A3x2ActionListener(myGridLayout,myFrame,this));
    button8.addActionListener(
       new A2x3ActionListener(myGridLayout,myFrame,this));

 

 

 

 

 

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

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

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

 

  public void actionPerformed(ActionEvent e){
    myGridLayoutObject.setRows(3);
    myGridLayoutObject.setColumns(2);
    myGuiObject.panel1.setLayout(myGridLayoutObject);
    myFrameObject.validate();
  }//end actionPerformed()

 

 

 

 

 

 

רישום מלא של התכנית מובא ביחידה הבאה.

 11-11-03 / 19:40  נוצר ע"י רונית רייכמן  בתאריך 
 מנהל GridLayout (שרטוט רשת) - הקודםהבא - רישום תכנית 
תגובות הקוראים    תגובות  -  0
דרכונט
מהי מערכת הדרכונט?
אינך מחובר, להתחברות:
דוא"ל
ססמא
נושאי לימוד
חיפוש  |  לא פועל
משלנו  |  לא פועל
גולשים מקוונים: 3