» נושאי לימוד
» נושאי לימוד
יום שני 29 באפריל 2024
דיון מפורט יותר
דף ראשי  מתקדמים  Swing, הבנת ()getContentPane ושכבות Jframe אחרות  דיון כללי  דיון מפורט יותר גרסה להדפסה

דיון מפורט יותר

 

כפי שהוזכר קודם, JrootPane מכיל   (glassPane (Jpanel ו- (layeredPane (JlayeredPane
ה- layeredPane מכיל בר תפריטים אופציונלי ו- contentPane (Jpanel). רכיב בר התפריטים הוא אופציונלי ויכול להתקיים או לא להתקיים בכל זמן. ה- layeredPane, contentPane 
ו-
glassPane תמיד יהיו זמינים.

 

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

 

parentContainer.add(childObject);

                      

התחביר הנכון לטיפול בשמשות אלה יהי יותר כדוגמת הבא:

 

myJFrameObject.getContentPane().add(myChildComponent);
myJFrameObject.getLayeredPane().add(
                    myChildComponent, new Integer(5));

 

ההצהרה הראשונה מוסיפה רכיב ל- contentPane. ההצהרה השניה מוסיפה רכיב לשכבה הממספרת 5 של layeredPane.

 

אותו הרעיון הוא נכון להסרת רכיבים, הכוונת מנהלי תצוגה וכ'ו.

 

ל- contentPane  יש מנהל BorderLayout כברירת מחדל.
ל-
layeredPane אין שום מנהל תצוגה (אפס) על ידי מחדל כפי שתראה בתוכנית דוגמא בשיעור.

 

אם רכיב JmenuBar מכוון על גבי JRootPane, הוא ממוקם לאורך הקצה העליון של המסגרת. ה- contentPane  עובר שינוי במיקום ובגודל על מנת למלא את האזור הנותר.

 

אם תבחן היטב את התיעוד ל- JlayeredPane, תראה שלמחלקה יש את השדות הבאים שהם כולם קבועים   סימבוליים  ציבוריים סטטיים סופיים של Interger.

 

 DEFAULT_LAYER- אובייקט מגדיר את שכבת המחדל. שווה ערך ל Integer(0) חדש.

 

PALETTE_LAYER - אובייקט מגדיר שכבת Palette. שווה ערך ל Integer(100) חדש.

 

MODAL_LAYER - אובייקט מגדיר שכבת מודל. שווה ערך ל- Integer(200) חדש.

 

POPUP_LAYER - אובייקט מגדיר שכבת POPUP. שווה ערך ל- Integer(300)  חדש.

 

DRAG_LAYER - אובייקט מגדיר שכבת Drag. שווה ערך ל- Integer(400) חדש.

 

FRAME_CONTENT_LAYER - אובייקט מגדיר את שכבת תוכן המסגרת. משתמשים בשכבה זו בדרך כלל רק על מנת למקם את רכיבי contentPaneובר תפריטים של Jframe. שווה ערך
ל-
Integer(-30000) חדש.

 

JmenuBar  ו- contentPane מתווספים לרכיב layeredPane בשכבה הבאה (-30000):

 

JlayeredPane.FRAME_CONTENT_LAYER

 

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

 

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

 

יש גם אפשרות לצייר רכיבים על ה- glassPane ( על אף שלא הצלחתי לעשות זאת בכוונה נכון
ל 5/12/98). כאשר זה נעשה, הרכיבים הללו מטילים צל על הרכיבים מתחתם ומונעים מהעכבר להשפיע על הרכיבים אלה הנמצאים למטה.

 

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

 

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

 

מנהל התצוגה הסטנדרטי בו משתמשים ב- JrootPane מוודא שהבא הוא נכון:

        ·  ה- glassPane , אם הוא נוכח ממלא את כל האזור הנראה של JrootPane  (גבולות- מפות).

        ·  ה- layeredPane ממלא את כל האזור הנראה שך JrootPane (גבולות- מפות).

        ·  בר התפריטים ממוקם בחלק העליון של ()layeredPane

        ·  ה- contentPane  ממלא את כל האזור נראה, מלבד בר התפריטים אם הוא נמצא.

 

אם תחליף את מנהל התצוגה של JrootPane, אתה אחראי לטיפול בכל תצוגות אלה.

 

אז עכשיו אנו יודעים שאובייקט JrootPane מכיל אובייקט מסוג JlayeredPane.

 

בעוד ש- JlayeredPane מטפל ברשימת ילדים כמו מכל, הוא גם מאפשר הגדרה של חלק מהשכבות בתוכו.

 

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

 

מסתבר שלכל רכיב Swing יש תכונת שכבה (אך לא הצלחתי למצוא דבר מעבר לתואר להלן).

 

ישנן לפחות שלוש דרכים לכוון תכונת שכבה על רכיב:

       1.   העברת אובייקט Integer בעל ערך אינטגר ליטראלי בזמן קריאת ההוספה:

            layeredPane.add(child,new Integer(10));

       2.  העברת אחד מהקבועים הסימבוליים שהוזכרו קודם בזמן קריאת ההוספה:

            ;layeredPane.add(child, JlayeredPane.DEFAULT_LAYER)

       3.  קריאה לפונקצית הכוונה הבאה על JlayeredPane אשר יהיה ההורה של הרכיב
    והעברת שם הרכיב ו-
int אשר יציין ספציפית את מספר השכבה:

           ;layeredPaneParent.setLayer(child’ 10)

 

במקרה השלישי, השכבה צריכה להיות מכוונת לפני הוספת ילד להורה.

 

שכבות בעלות מספרים גבוהים יותר מציגים מעל לשכבות בעלי מספרים נמוכים יותר.

 

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

 

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

 

נראה מספר דוגמאות בתוכנית דוגמא להלן.

 

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