40
1 – ההההה ההה הההההGraphical User Interface ההההה הההה11

1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

  • View
    222

  • Download
    5

Embed Size (px)

Citation preview

Page 1: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

1

– מנשקי אדם מכונהGraphical User Interface

מספר 11הרצאה

Page 2: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

2

Page 3: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

3

Eclipse

Page 4: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

4

גראפי מנשק פיתוח שלבי

מהנדס מנשקי אנוש

מפתח מנשק כך שיהיה •מובן, יעיל, נעים

מודדים את איכות •המנשק על קב' משתמשים

ומתקנים בהתאם

מחליט איך הממשק •יתנהג

מעצב גראפי

מחליט על סוגי •האלמנטים שיופיעו על

המסך, ועל סידורם

מחליט איך המנשק •ייראה/יישמע תוכניתן

לנו אין תפקיד כ"כ גדול מממשיםבתהליך

Page 5: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

5

אנוש מנשקי הנדסת

המנשק צריך להתנהג בהתאם לציפיות המוקדמות קונסיסטנטיות ;של המשתמש/ת; פעולות אוטומטיות )גזור-הדבק, למשל(, המראה

של פריטים )צלמיות, למשל(, המראה וההתנהגות הכללית של התוכנית, של הפלטפורמה

חזרה אחורה באשף, ידיעה המשתמש/ת בשליטה, לא המחשב ;מה המצב הנוכחי של התוכנית ומה היא עושה כרגע

חומרה היא זולה, משכורות יעילות של המשתמש, לא של המחשב ;הן יקרות, ואכזבות הן עוד יותר יקרות

האם משתמשים בה התאמה לתכיפות השימוש וללימוד התוכנה ;באופן חד פעמי )אשף לכתיבת צוואות( או יומיומי )דואל(; גם

משתמש יומיומי בתוכנה היה פעם מתחיל חסר ניסיון

Page 6: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

6

מנשקים עיצוב

קונסיסטנטיותלהדגשת מה שבאמת דרוש הדגשה; עומס קונטרסט

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

משמאל לימין, או ימין לשמאל( העיצוב הגרפי של מנשק של תוכנית בדרך כלל אינו

מוחלט; המשתמש ו/או הפלטפורמה עשויים להשפיע על בחירת גופנים ועל הסגנון של פריטים גראפיים )כפתורים,

העיצוב צריך להתאים את עצמו לסביבהתפריטים(;

Page 7: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

7

למימוש ועכשיו

Page 8: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

8

שלושת הצירים של תוכנה גרפית

אלמנטים מסוגים שונים על המסך )היררכיה שלטיפוסים(

הארגון הדו־מימדי של האלמנטים, בדרך כלל בעזרתמיכלים

ההתנהגות הדינמית של האלמנטים בתגובה לפעולות של המשתמש/ת )הקלדה, הקלקה, גרירה(

Page 9: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

9

החלונות מודל

כל דבר הוא חלון)החלונות מקיימים יחס הכלה )אחד לרבים

משטח עבודה)אב עליון(

שורת משימות

אפליקציה)צייר(

Page 10: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

10

) המשך ) החלונות מודל

Page 11: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

11

: זעיר דפדפן ראשונה דוגמהמגולגל

Page 12: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

12

לעשות אמור הדפדפן מה

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

לחיצה על הכפתורI'm feeling lucky מימין לשדה הטקסט תשלח את מחרוזת החיפוש

Googleל- כאשר תתקבל התשובה, הדפדפן ישלוף

( URL את הכתובת )Googleמהתשובה של HTMLהראשונה ויטען אותה לרכיב הצגת ה-

בתחתית המסך, וכן ישנה את כותרת החלון כך URLשתציג את ה-

נממש את הדפדפן בעזרת ספרייה למימוש SWT (Standardמנשקים גראפיים בשם

Widget Toolkit) ספריות אחרות למימוש מנשקים גראפיים

/Swinghttp://www.eclipse.org/swt ו-AWTבג'אווה הן

Page 13: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

13

המימוש מבנה

public class GoogleBrowser { private Shell shell = null; private Button button = null; private Text text = null; private Browser browser = null; public static void main(String[] args) { call createShell and run event loop } private void createShell() { create the GUI } private static String search(String q) { send query to Google and return the first URL

}}

Page 14: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

14

Widgets

השדותtext, button, browser-ו ,shell יתייחסו לרכיבי widgetsהמנשק הגראפי; רכיבים כאלה נקראים

( מעטפתshell ,הוא חלון עצמאי שמערכת ההפעלה מציגה )ושאינו מוכל בתוך חלון אחר; החלון הראשי של תוכנית הוא מעטפת, וגם דיאלוגים )אשף, דיאלוג לבחירת קובץ או גופן,

וכדומה( הם מעטפות עצם המעטפת בג'אווה מייצג משאב של מערכת ההפעלה ,הרכיבים האחרים הם אלמנטים שמוצגים בתוך מעטפת

כמו כפתורים, תפריטים, וכדומה; חלקם פשוטים וחלקם (HTML, רכיב להצגת Browserמורכבים מאוד )כמו

לפעמים הם עצמים שממופים לבקרים שמערכת ההפעלה(, ולפעמים הם עצמי ג'אווה controlsמציגה בעצמה )

טהורים

Page 15: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

15

הראשית הלולאה

public static void main(String[] args) { Display display = Display.getDefault(); GoogleBrowser app = new GoogleBrowser(); app.createShell(); while (!app.shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); }

Page 16: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

16

הגראפי המנשק יצירת

private void createShell() { shell = new Shell(); shell.setText("Browser Example"); shell.setLayout(new layout manager: a grid

with GridLayout(2, false)); 2 unequal columns text = new Text(shell, SWT.BORDER); text.setLayoutData(new GridData(SWT.FILL, horizontal alignment SWT.CENTER, vertical alignment true,grab horizontal space false)); don't grab vertical space

Page 17: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

17

במעטפת המנשק רכיבי פריסת

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

בקואורדינטות של הרכיב y ו-xבאופן אבסולוטי )ערכי המכיל(

( מנהלי פריסהlayout mangers מחשבים את הפריסה )על פי הוראות פריסה שמצורפות לכל רכיב מוכל

GridLayout הוא מנהל פריסה שממקם רכיבים בתאים של טבלה דו-מימדית; רכיבים יכולים לתפוס תא אחד או

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

ביותרGridData הוא עצם שמייצג הוראות פריסה עבור

GridLayout כאן ביקשנו מתיחה אופקית של הרכיב עצמו ; בתוך העמודה ושל העמודה כולה

Page 18: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

18

מנשק רכיבי בניית

בנאי שבונה רכיב מנשק מקבל בדרך כלל שניארגומנטים: ההורה של רכיב המנשק בהיררכיית

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

)סיבית SWT.BORDER )ההורה( ו-shellהארגומנטים סגנון(

)למעטפת אין הורה )אבל יכלו להיות לה סיביות סגנון את תכונות ההורות והסגנון אי אפשר לשנות לאחר

שהרכיב נבנה ,רכיבים שונים משתמשים בסיביות סגנון שונות; למשל

למעטפת יכולה להיות או לא להיות מסגרת עם כפתורי (, אבל לרכיב trimסגירה ומיזעור )המסגרת נקראת

פנימי אי אפשר לבחור סגנון שכולל מסגרת כזו

Page 19: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

19

המנשק יצירת המשך

button = new Button(shell, SWT.NONE);button.setText("I'm feeling lucky");button.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));browser = new Browser(shell, SWT.NONE);browser.setLayoutData(new GridData(SWT.FILL, SWT.FILL, fill both ways false, true, row grabs vertical space 2, 1)); widget spans 2 columns

Page 20: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

20

מפעיל שהכפתור הפרוצדורה

button.addSelectionListener( new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { String query = text.getText(); String url = search(query); shell.setText(url); browser.setUrl(url); } });

Page 21: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

21

בהם והטיפול אירועים

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

( ההודעה מתקבלת על ידי עצם יחידsingleton ), שמייצג את מערכת ההפעלה )מע' Displayמהמחלקה

החלונות(-קבלת אירוע מעירה את התוכנית מהשינה בsleep-כאשר קוראים לreadAndDispatch-ה ,display מברר

לאיזה רכיב צריך להודיע על האירוע, ומודיע לו הרכיב מפעיל את העצמים מהטיפוס המתאים לסוג האירוע

add*Listenerשנרשמו להפעלה על ידי קריאה ל-

Page 22: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

22

באירועים לטיפול גישות שלוש

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

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

ללא טיפוסים סטאטיים שמתאימים לאירועים Listnerספיציפיים; האירוע מפעיל עצם מטיפוס

, והאירוע מדווח handleEventשמממש שירות בודד, ; יותר יעיל, פחות בטוחEventבעזרת טיפוס

יש ספריות של מנשקים גראפיים, למשלAWT ,שמשתמשות בירושה: המחלקה שמייצגת את המנשק

( ודורסת Shell )מקביל ל-Frameשלנו מרחיבה את קוראת לו Frame, ש-handleEventאת השירות

לטיפול באירועים

Page 23: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

23

ספציפי לא במאזין לשימוש דוגמה

button.addListener( SWT.Selection, the event we want to handle new Listener() { public void handleEvent(Event e) { String query = text.getText(); String url = search(query); shell.setText(url); browser.setUrl(url); } });

Page 24: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

24

Listener לעומת Adapter

לכפתור הוספנו מאזין ספציפי ממחלקה אנונימיתSelectionAdapterשמרחיבה את

SelectionAdapter היא מחלקה שמממשת את המנשק SelectionListenerשמגדיר שני שירותים

-בSelectionAdapterשני השירותים אינם עושים כלום , ,הרחבה שלה מאפשרת להגדיר רק את השירות שרוצים

על פי סוג האירוע הספיציפי שרוצים לטפל בו; ארועים אחרים יטופלו על ידי שירות שלא עושה כלום

אם המחלקה האנונימית הייתה מממשת ישירות אתSelectionListener היא הייתה צריכה להגדיר את שני ,

השירותים, כאשר אחד מהם מוגדר ריק; מסורבל

Page 25: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

25

סיימנו כמעט

-נותרו רק שתי שורות שלא ראינו בcreateShell,

button.addSelectionListener(…);

shell.pack(); causes the layout managerto lay out the shell

shell.open(); opens the shell on the screen}

והפרוצדורה שמחפשת במנוע החיפושGoogle של התשובה הראשונהURLומחזירה את ה-

Page 26: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

26

Googleחיפוש ב-

private static String search(String q) { GoogleSearch s = new GoogleSearch(); s.setKey ("sivan's secrete key"); s.setProxyHost ("proxy.tau.ac.il"); s.setProxyPort (8080); s.setQueryString(q); s.setStartResult(0); try { GoogleSearchResult r = s.doSearch(); return (r.getResultElements())[0].getURL();

Page 27: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

27

והתוצאה

Page 28: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

28

ביניים סיכום

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

מיותר, ובעצם, אפשר היה להשתמש בשדה הטקסט גם באופן ישיר URLעבור חיפוש וגם עבור הקלדת

:המחלקות שמייצגות את רכיבי המנשק מורכבות מאודצריך ספר או מדריך מקווןצריך להתאמן( רצוי להשתמש במנגנון עריכה ייעודי למנשקים גראפייםGUI

Builder)

Page 29: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

29

משאבים שחרור

חלק מהעצמים שמרכיבים את המנשק הגראפי מייצגיםלמעשה משאבים של מערכת ההפעלה, כמו חלונות,

כפתורים, צבעים, גופנים, ותמונות כאשר עצם שמייצג משאב נוצר, הוא יוצר את המשאב, ואם

לא נשחרר את המשאבים הללו, נדלדל את משאבי מערכת ההפעלה

סיביות לכל פיקסל16 או 8למשל, צבעים בתצוגה של -בSWT אם יצרנו עצם שמייצג משאב של מערכת ,

כאשר אין בו צורך disposeההפעלה, צריך לקרוא לשירות יותר

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

( וכאלה שלא Fontשמייצגות משאבים )למשל (FontData)

Page 30: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

30

Look and Feel

מערכות הפעלה עם מנשק גראפי מספקות שירותי מנשק; אבל לא לינוקס ויוניקס( MacOS ו-Windows)למשל,

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

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

;שימוש ישיר ברכיבי מנשק של מערכת ההפעלהAWT, SWT

אמולציה של התנהגות מערכת ההפעלה אבל כמעט ללא ,Swingשימוש ברכיבי המנשק שלה )פרט לחלונות(; למשל

JFace, Qt ,זה מאפשר להחליף מראה ;pluggable look & feel

Page 31: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

31

Pluggableיתרונות וחסרונות של L&F

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

מחשב )בעיקר נגני מוסיקה וסרטים(, ובשביל מיתוג (branding)

;מאפשר לבנות יישומים עם מראה אחיד על כל פלטפורמהשימושי ליישומים ארגוניים

קשה לממשlook & feelחדש סכנה של מראה מיושן, אם מערכת ההפעלה החליפה את

המראה של הרכיבים אבל האמולציה לא עודכנה )למשל (XP על מערכת חלונות 2000מראה של חלונות

אי התאמה לקביעת התצורה של המשתמשת )אם היא על חלונות 2000בחרה למשל להשתמש במראה של חלונות

XP)

Page 32: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

32

בפלטפורמות המנשק תחושתשונות

בחלונות ולינוקס משתמשים בצירופיםControl-C, Control-V עבור גזור והדבק

במחשבי מקינטוש יש מקשControl אבל יש גם מקש ,Command ,, ולא על Command-C, Command-Vוגזור והדבק מופעלי על ידי

Controlידי צירופי תוכנית שמפעילה גזור והדבק ע"יControl-C/V תחוש לא טבעית

במקינטוש-בSWT מוגדרים המקשים Control וכדומה, אבל גם "מקשים

ממופה MOD1, כאשר MOD3, ו-MOD1, MOD2מוכללים" במקינטושCommand בחלונות אבל ל-Controlל-

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

Page 33: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

33

נכונה פריסה

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

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

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

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

אלגוריתמי פריסה מתוחכמים עבור מיכלים, כגוןGridLayout מסייעים, אבל צריך להבין כיצד ,

מתבצעים חישובי הפריסה וכיצד להשפיע עליהם

Page 34: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

34

פריסה חישובי

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

)מרכיבים מוכלים למיכלים שלהם עד מעטפות חיצוניות( ומלמעלה למטה

( חישובים מלמטה למעלהpostorder ברקורסיה( עונים על השאלה "באיזה גודל רכיב

או מיכל רוצים להיות?"( חישובים מלמעלה למטהpreorder עונים על )

השאלה "בהינתן גודל למיכל, היכן ובאיזה גודל למקם כל רכיב?"

Page 35: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

35

למעלה מלמטה פריסה

כל רכיב צריך לדעת באיזה גודל הוא רוצה להיות )שם, בספריות אחרות computeSize הוא SWTהשירות ב-

preferred Size ) יש ספריות שבהן כל רכיב צריך לדעת מה גודלו המינימאלי

(minimumSize-אבל לא ב ,)SWT רכיב פשוט מחשב את גודלו הרצוי על פי תוכנו )למשל על

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

מיכל מחשב את גודלו הרצוי על ידי חישוב רקורסיבי שלהגודל הרצוי של הרכיבים המוכלים בו, והרצת אלגוריתם

הפריסה של המיכל על הגדלים הללואבל זה מסתבך

Page 36: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

36

סיבוכים שני

יש רכיבים שגובהם תלוי ברוחבם או להיפך; למשלתווית או סרגל כלים שניתן להציג בשורה אחת ארוכה,

או לפרוס על פני מספר שורות קצרות ,לכןcomputeSize מאפשר לשאול את הרכיב מה

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

יש רכיבים שעלולים לרצות גודל עצום, כמו עורכיטקסט, טבלאות, ועצים )ובעצם כל רכיב שעשוי לקבל

פס גלילה( הגודל הרצוי שהם מדווחים עליו אינו מועיל; צריך לקבוע

את גודלם על פי גודל המסך, או על פי מספר שורות ו/או מספר תווים רצוי

Page 37: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

37

למטה מלמעלה חישובים

השירותlayout פורס את הרכיבים המוכלים במיכל או setSizeלאחר שגודל המיכל נקבע )על ידי

setBounds)המיכל פורס בעזרת אלגוריתם הפריסה שנקבע לו ;לפעמים, הפריסה לא תלויה בגודל הרצוי של הרכיבים

מחלקת את FillLayoutלמשל, אלגוריתם הפריסה המיכל באופן שווה בין הרכיבים המוכלים, לאורך או לרוחב

;בדרך כלל, הפריסה כן תלויה בגודל הרצוי של הרכיבים, למשל, הרוחב של עמודות ושורות לא GridLayoutב-

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

שאר המיכל רכיבים זוכרים את גודלם הרצוי כדי לא לחשבו שוב ושוב

Page 38: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

38

הדוקה אריזה

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

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

)טבלה ארוכה, תווית טקסט ארוכה(, החלון עלול לחרוג מהמסך

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

חורג מהמסך, אחרת להגביל את האורך ו/או הרוחבאם המיכל מכיל המון רכיבים, חישוב סכנת איטיות :

גודלו הרצוי יהיה איטי )רוחב עמודה בטבלה ארוכה(; כדאי להעריך את הגודל הרצוי בדרך אחרת

Page 39: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

39

אריזה אלגוריתמי

FillLayoutרכיבים בשורה/עמודה, גודל אחיד לכולם :RowLayout רכיבים בשורה/עמודה, עם אפשרות שבירה :

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

ועמודות ימתחו ואיזה לא, ולקבוע רוחב/גובה לרכיביםFormLayout מיקום בעזרת אילוצים על ארבעת הקצוות :

)או חלקם( של הרכיבים; אילוצים יחסיים או אבסולוטיים פיקסלים( או 4ביחס למיכל )למשל, באמצע רוחבו ועוד

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

StackLayout ערימה של מיכלים בגודל זהה אבל רק :העליון נראה; שימושי להחלפה של תוכן מיכל או חלון

Page 40: 1 מנשקי אדם מכונה – Graphical User Interface הרצאה מספר 11

40

סיכום מנשקים גרפיים

דע/י את מקומךשלושה מנגנונים כמעט אורתוגונאליים: ירושה, הכלה, אירועים פגמים במנשק גראפי נובעים במקרים רבים או מפריסה לא

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

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

רכיבי המנשק ובין החלק הפונקציונאלי של התוכנית )המודל(; ; קשה יותר ללמוד להשתמש בעצמי SWT מעל jfaceלמשל,

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