© Keren Kalif GUI קרן כליף.

Slides:



Advertisements
מצגות קשורות
בית ספר קהילתי - מדעי ישגב
Advertisements

פורטל בית ספרי.
הכרת תוכנת בקרים. כניסה לתוכנה תתבצע בשלבים הבאים: 1
יסודות הצילום- קומפוזיציה
מהי אומנות? מונח אמנות אוצר בתוכו את המילה אמן. "יצירה ששוקעו בה כשרון רב ויש בה כדי ליהנות את הרואה או את השומע ולגרום להם חוויה אסתטית בתחום הציור, הפיסול,
תחקור והערכת מערכת .
אשף ניהול הדיווח החודשי לרשויות
תכנות בשפת C תרגול 11 - קבצים.
פרסום וקידום מכירות בכל שלב במחזור חיי המוצר, משתנה מדיניות התקשורת השיווקית שלו. פרט את מטרת התקשורת השיווקית בשלושה שלבים במחזור חיי מוצר כלשהו שתבחר.
© Keren Kalif JPA קרן כליף.
הרצאה 02 סוגי משתנים קרן כליף.
בית-ספר כארגון – גישה מערכתית
יצירת מקרו הפעלת מקרו יצירת לחצן / פקד דוגמה מסכמת
בקרת Sliding Mode של מערכת עקיבה
מבוא לתכנות ב-JAVA מעבדה 1
טיפים מנצחים: לחפש ולמצוא במהירות ובדיוק
סוגים של מזגנים.
תוכנה 1 תרגול 13 – סיכום.
HTML שפת Hyper Text Markup Language
פינוק מסביב לעולם מחזות זמר הסבר הזמנה ומימוש.
נערך ע"י אריק הוד, הגימנסיה העברית הרצליה
תוכנה 1 תרגול 12 – סיכום.
כל הזכויות שמורות לגבריאל אנקרי © 2017
מטרת פרויקט "שיעורים פרטיים ברשת"
פעולות בסביבת רובוטיקה
מבצעים: רועי מור טל מסרי
תכנות בשפת C תרגול 11 רשימות מקושרות מבנים
פעולות אריתמטיות קרן כליף.
כפליות של מצבים במערכת מרובת חלקיקים נקודת מבט מיקרוסקופית
Entity Relationship Diagram – ERD
חשבון זה הוא חלק ממוצרי 365 ומקושר לתיבת המייל
ניתוח עקיבות.
תהליך ההרשמה לבעלי אימייל של המכללה, ניתן להכנס לכתובת הבאה וליצור חשבון:
פינוק מסביב לעולם הסבר הזמנה ומימוש.
רובוטיקה תרגול שימוש בלולאות
© האוניברסיטה העברית בירושלים, 2008
טיולים מהווים כלי נהדר לחינוך דרך התנסות אישית, אתגרים וגיבוש.
כל הזכויות שמורות לגבריאל אנקרי © 2017
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
Web Services Delegates and Events ליווי מקצועי : ארז קלר
מבוא לתכנות מונחה עצמים Object Oriented Programming
Harel Mazor Open Source GIS Meetup / 11-jun-2018 / Tel-Aviv
יישומון הר לעמק 2019 הוראות הפעלה.
יום עיון, לשכות המסחר , איתן גרנות net
מבוא לתכנות למערכות מידע
Data Science by levels Dr. Alon Hasgall.
כל הזכויות שמורות לגבריאל אנקרי © 2017
תרגול 13 : חזרה נכתב על-ידי לימור ליבוביץ נערך ע"י ישראל גוטר
CLI vs GUI.
Solving Simultaneous Linear Equations Using GPU
שימוש בעצם ממחלקה אחרת כמאפיין במחלקה הנוכחית
מבוא לתכנות ב- JAVA מעבדה 4
מבנה כללי של היררכיית הקבצים עבור המסלול /A/B.txt
מבוא למדעי המחשב סמסטר ב' – 2008 מרצה: יעל סיגל מתרגל: ענבל בודובסקי.
מערכת שיווק רב ערוצית לעולם הקמעונאות
שרטוט ידני - חלק 1.
תוכנה 1 בשפת Java שיעור מספר 12:"צייר לי כבשה" (GUI)
לאינטל ירושלים דרושים סטודנטים להנדסת תוכנה/ מדעי המחשב להשתלבות במחלקות הפיתוח להשתלבות בצוות בדיקות קושחה (FW), התפקיד כולל לימוד מעמיק של תכונות ופרוטוקולים.
(או כיצד ללמוד בצורה נכונה מתחילת הסמסטר)
(או כיצד ללמוד בצורה נכונה מתחילת הסמסטר)
הצג את עצמך, את עמותת תפוח ואת נושא הפעילות.
מעבדה 2- עיצוב (עבור חלק ג)
ניהול שינויים במחסן נתונים יש עומק היסטורי הארגון משתנה במשך הזמן
מערכת הערעורים מסכי סטודנטים.
חקרנות מתמטית: הקשר בין שטחים והיקפים - האומנם?
עקרונות תכנות מונחה עצמים תרגול 9:C++ - תרגילים
SharePoint 2010 שרון אלטרמן מאי 2012.
Java Programming רשימות מקושרות - המשך
Engineering Programming A
תמליל מצגת:

© Keren Kalif GUI קרן כליף

ביחידה זו נלמד: AWT לעומת SWING Look & Feel תכנון היררכי של ה- GUI אירועים Layout MVC

דוגמא בסיסית של GUI באמצעות AWT יש לרשת מהמחלקה Frame כדי שהתוכנית תיפתח בחלון כב"מ, ה- Frame אינו מגיב ללחיצה על ה- X, ולכן צריך להוסיף אירוע (פירוט בהמשך) יש להגדיר כיצד יסודרו הרכיבים בחלון (פירוט בהמשך) הוספת 2 פקדי Label ופקד Button כב"מ Frame אינו מוצג למסך, לכן צריך להפעיל את setVisible. לכל שאר הפקדים הערך true הוא ב"מ.

היסטוריה (1) GUI הינו ממשק משתמש גרפי: Graphic User Interface בעבר בשפת JAVA עבדו עם מנגנון ה- AWT (Abstract Window Toolkit) מנגנון זה היה תלוי במערכת ההפעלה, ולכן הרצת התוכנית נראתה באופן שונה על מערכות הפעלה שונות ה- JVM ביקש ממערכת ההפעלה לבצע את הציור בפועל (הפקדים), ומכאן נבע השוני בהופעה למסך בגלל הפניות הרבות למערכת ההפעלה, שלמעשה הינן יציאה ממסגרת ה- JVM, השימוש במנגנון כבד בגלל השוני בין מערכות ההפעלה השונות, לא ניתן לבצע קוסטומיזציה למשל: אם ב- windows ניתן להציג תמונה על כפתור ובלינוקס לא, זה בעייתי

היסטוריה (2) בגירסא 1.2 של JAVA יצא ה- SWING, העובד באופן שונה מאשר AWT: ב- swing שכתבו חלק מהקומפוננטות (רכיבים) של AWT, ושמן יהיה זהה פרט לכך שיתחילו ב- J למשל: Jframe במקום Frame. ההבדל המהותי בין AWT ל- SWING הוא ש- SWING מציירת בעצמה את הרכיבים ולא מערכת ההפעלה. כלומר, swing יודע עפ"י מערכת ההפעלה שעליה הוא רץ כיצד להציג את הרכיב. יתרונות: התוכנית יותר קלה ומהירה כי אין פניות רבות למ"ה ניתן לבצע קוסטימיזציה בקלות כי אין תלות במ"ה (ה- swing יודע לצייר את הרכיב ולא מתבסס על מ"ה, בניגוד ל- AWT

דוגמא בסיסית של GUI באמצעות SWING הפעם יש לרשת מהמחלקה JFrame כב"מ, ה- JFrame אינו מגיב ללחיצה על ה- X, אבל יש פקודה מובנית להגבת האירוע שמות הפקדים מתחילים ב- J

התצוגה ב- AWT לעומת SWING

לא ניתן להוסיף פקד פעמיים

שינוי התצוגה באפליקציית swing תצוגת Windows משמע להתאים את גודל החלון לגודל הרכיבים בעקבות שינוי התצורה כך יראה בלי theFrame.pack

ערכים שונים ל- L&F UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel"); UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel"); UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); יקח את הגדרות מערכת ההפעלה, Windows במקרה שלי UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); וזוהי אופציית ב"מ

במקום חלון. מאפשר לפתוח JAVA בדפדפן. כבר לא בשימוש. קומפוננטות ב- SWING מתחלקות ל- 3 סוגים: JComponent: הרכיבים הבסיסים שניתן להציג. למשל: JLabel, JText, JButton. יש כ- 35 רכיבים שכאלו. Container: רכיב שיכול להכיל בתוכו רכיבים אחרים, סוג של לוח ציור. JPanel, JTabbedPane, JSplitPane, JScrollPane Top Level Container: יש רק אחד כזה באפליקציה והוא למעשה החלון של התוכנית, ה- Conatiner הראשי. יכול להיות אחד מהבאים: JFrame, JDialog, JApplet, JWindow הכי פופלארי Pop Up במקום חלון. מאפשר לפתוח JAVA בדפדפן. כבר לא בשימוש.

היררכיה נכונה ביצירת אפליקציה למשל JFrame, JDialog למשל Jbutton, JLabel JFrame JPanel JLabel JTextBox JButton למשל JPanel הרכיב הראשי מציג ברקורסיה את כל הרכיבים שתחתיו

דוגמא לאפליקציה פשוטה יצירת Panel עם מסגרת וכותרת יצירת כל הפקדים על panel ולא ישירות על ה- Frame לכל container צריך לתת גודל, אחרת גודלו הוא 0

הוספת פקדים ל- Content Pane גם דרך ה- JFrame הוספת הפקד ל- panel ולא ל- frame

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

הגדרת גודל של Frame ביחס גודל המסך

הגדרת מיקום פתיחת החלון כב"מ, החלון נפתח בפינה העליונה השמאלית. ניתן לשנות הגדרה זו באמצעות השיטה setBounds: במקום setBounds ניתן להשתמש ב- setSize וב- setLocation בנפרד

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

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

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

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

הפעלת האירוע ב- main

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

האזנה ללא אובייקט אנונימי האזנה ללא אובייקט אנונימי

האזנה ליותר מאירוע אחד

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

האזנה לאירועים ע"י מימוש ממשק לעומת מימוש מחלקה ממשק יסתיים ב- Listener ויש חובה לספק מימוש לכל המתודות מחלקה תסתיים ב- Adapter וניתן לספק מימוש רק לחלק מהמתודות

האזנה לאירועים באמצעות AbstractAction יש מקרים בהם נרצה שכמה פקדים יגיבו בצורה זהה, בלי לשכפל את הקוד. למשל: תפריט, כפתור וכד' גם הטקסט וגם הפעולה ActionPerformed תהייה זהה ישנם פקדים שה- c’tor שלהם מקבל אובייקט מהמחלקה AbstractAction המגדיר את הטקסט שיוצג על הפקד ואת הפעולה שתבוצע באת לחיצה/בחירה

AbstractAction - דוגמא

דריסת פעולת סגירת החלון לא חובה לציין פקודה זו. ב"מ היא HIDE_ON_CLOSE כך שלא יקרה כלום אם נשאיר אותה, כי בכל מקרה אנו דורסים את פעולת הסגירה. הפרמטר הראשון של JOptionPane מקבל הוא החלון שבמרכזו נציג את התיבה (null עבור מרכז המסך(. נרצה שהתיבה תפתח במרכז ה- JFrame. מאחר ואנו בתוך InnerClass, כדי לקבל את המחלקה החיצונית נשתמש ב- <outer class name>.this

אבחנה לוגית בין שיטות הרכיבים Properties: שיטות המגדירות כיצד הרכיב יראה, למשל setBackgroundColor, setPrefferedSize. אין קשר למידע שיוצג עליו. Methods: שיטות המאפשרות אינטראקציה עם המידע. Event: מתודה המאפשרת לתת lisetener לכל מיני אירועים.

לינק עם הצגה של כל הפקדים הדוגמא של שינוי התצוגה הדוגמא SimpleLookAndFeelExample מקובץ הזיפ http://download.oracle.com/javase/tutorial/ui/features/co mpWin.html לינק עם הצגה של כל הפקדים

הפעלת ה- swing ב- thread נפרד כלומר, שאם קורה אירוע בזמן ציור ה- GUI, התוכנית לא "תתקע" Thread זה נקרא Event Dispatch Thread (EDT) באפליקציות גדולות, thread'ים אחרים ירצו לעדכן את ה- GUI, וכדי למנוע "תקיעות" וכדי שהעבודה תיעשה במקביל

הפעלת ה- swing ב- thread נפרד - הקוד

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

הצגת תמונה (2)

יסודרו ברצף אחד ליד השני. שינוי גודל החלון יארגן אותם מחדש. Layout Manager נכתוב תוכנית המוסיפה 10 רכיבים לחלון. כיצד הם יסודרו? יסודרו ברצף אחד ליד השני. שינוי גודל החלון יארגן אותם מחדש.

FlowLayout כב"מ JAVA מסדרת לנו את הרכיבים ב- FlowLayout כלומר, סידור הרכיבים אחד ליד השני ומעבר לשורה הבאה כאשר נגמר המקום אלא אם נתנו מיקום מדויק לרכיב מתן מיקום מדויק אינו טוב, מאחר וכבר לא תהייה פרופורציה כאשר נשנה את גודל החלון JAVA מספקת לנו כל מיני אלגוריתמי סידור (Layout), והם גם יודעים לחשב את הפרופרציות עם שינוי גודל החלון בשימוש ב- Layout ניתן לקבוע את המרחק בין הרכיבים השונים

סקירת Layout לקוח מתוך http://www.docstoc.com/docs/33446046/Java-Swing

BorderLayout מאפשר סידור רכיבים בצורת מסגרת. כב"מ שם את הפקד בתוך החלק של ה- CENTER, ולכן בדוגמא זו רואים רק את הפקד האחרון:

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

BoxLayout – סידור הרכיבים בשורה או בעמודה בניגוד ל- FlowLayout, הרכיבים לא יעברו לשורה הבאה.

Spring Layout - סידור רכיבים במיקום יחסי ה- west של ה- label יהיה במרחק 50 פיקסלים מה- west של ה- panel ה- west של ה- textFieldיהיה במרחק 5 פיקסלים מה- east של ה- label

Layout נוספים CardLayout: הצגת רכיב אחד כל פעם, אחד מעל השני GridLayout: מגדיר טבלה. יש לספק כמות שורות וכמות עמודות. אם כמות השורות היא 0, אז מסתמך על כמות העמודות, והפוך כל הגדלים של התאים זהים הוספת רכיבים היא לפי הסדר, לא ניתן לדלג על תאים ComplexLayout: כאשר layout אחד מכיל layout אחר באחד הרכיבים שלו כאשר הראשי עושה resize, זה משפיע גם על הפנימיים מדריך מצויין ל- layout'ים: http://download.oracle.com/javase/tutorial/uiswing/layout /visual.html

עדכון יזום של התצוגה repaint – נפעיל אותה כאשר יש לצייר את ה- container מחדש, לאחר הוספת/הסרת פקד validate – גוררת סידור מחדש של הרכיבים ב- container, נפעיל לרוב על TopLevelContainer לאחר הוספה והסרה של פקד. הפקודה תחלחל רקורסיבית לכל הרכיבים המוכלים. יגרור repaint במקרה הצורך. לכן בהוספה ובהסרה נפעיל את repaint+validate הדוגמא: RepaintAndValidateExample

הדוגמא Survivors מהזיפ: כבר קיים בדוגמא: JSplitPane בין שני השבטים JPanel לכל שבט ובתוכו JScrollPane להצגת השורדים הוספת שורד לשבט באמצעות כפתור ובאמצעות תפריט העברת שורדים משבט לשבט באמצעות כפתור ובאמצעות DC עליכם להוסיף: JPanel לאי המתים בתוך JScrollPane JSplitPane בין החלק העליון של השבטים לאי המתים העברת שורד לאי המתים באמצעות כפתור מחיקת שורד מאי המתים, יהיה באמצעות דאבל קליק על השורד עם הודעת אישור

דוגמאות לרכיבים ב- swing בלינק הבא יש דוגמאות לקוד המשתמש ב- SWING: פלט + source code http://java.sun.com/products/jfc/jws/SwingSet2.jnlp

דוגמא לעבודה עם טבלה בעבודה עם טבלה יש אובייקט שנקרא AbstractTableModel המחזיק את המידע שבטבלה המחלקה המובנית DefaultTableModel מהווה מימוש למחלקה אבסטרקטית זו: הדוגמא JTableWithDefaultTabelModelExample ניתן לרשת מממשק זה: הדוגמא JTableWithAbstractTabelModelExample

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

MVC – Model-View-Controller 2 4 3 1 התמונה לקוחה מ: http://www.oracle.com/technetwork/articles/javase/index-142890.html

MVC – Model-View-Controller ל- Model ול- View יהיה listener שיודיע לכל המאזינים עם כל עדכון סגנונות המקובלים לשיטה זו: fireXXXChanged fireXXXEvent הדוגמא MVCBusExample.simple הזיפ

הדוגמא MVCBusExample.renderer הזיפ משמש כ- controller המובנה בשפה תפקידו לקשר בין אובייקט מה- BL ל- UI וכן להציגו DefaultListCellRenderer הוא סוג של JLabel וישנם renderer'ים נוספים, למשל טבלה יש לדרוס את השיטה getListCellRendererComponent אשר קובעת כיצד תראה תצוגת האובייקט הדוגמא MVCBusExample.renderer הזיפ

עורך GUI ניתן להוריד plug-in לאקליפס המאפשר יצירת GUI בצורת Drag & Drop בסביבת העבודה של ה- NetBeans כבר יש תשתית built-in לכך יש לשים לב, שאם יוצרים GUI באמצעות drag&drop ברוב התוכנות מתווסף קוד שלא יעבוד בסביבה אחרת

ביחידה זו למדנו: AWT לעומת SWING Look & Feel תכנון היררכי של ה- GUI אירועים Layout MVC