06b- drawing in gui

Download Report

Transcript 06b- drawing in gui

‫תכנות מכוון עצמים בשפת ‪JAVA‬‬
‫הרצאה ‪ – 06‬חלק ב'‬
‫ציור בסיסי ב‪JAVA -‬‬
‫‪© Keren Kalif‬‬
‫ביחידה זו נלמד‪:‬‬
‫‪‬‬
‫האובייקט ‪Graphics‬‬
‫שיטות ‪ draw‬ו‪fill -‬‬
‫המחלקה ‪Color‬‬
‫המחלקה ‪ Font‬ו‪FontMetrics -‬‬
‫מתי מופעלת השיטה ‪paintComponent‬‬
‫פרופורציות הציור‬
‫האובייקט ‪Timer‬‬
‫‪2‬‬
‫‪© Keren Kalif‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫כתיבת טקסט ל‪panel -‬‬
‫השיטה מוגדרת במחלקה ‪Component‬‬
‫שהיא אב של ‪.JPanel‬‬
‫השיטה אחראית על הצגת תוכן החלון‪.‬‬
‫מקבלת כפרמטר את האובייקט הגרפי‬
‫איתו עובדים‪.‬‬
‫נכנסים לשיטה כל פעם כאשר‬
‫החלון מצוייר מחדש‪ :‬לאחר‬
‫הקטנה‪ ,‬שינוי גודל או הסתרה‪.‬‬
‫‪3‬‬
‫‪© Keren Kalif‬‬
draw ‫ שיטות‬:Graphics ‫האובייקט‬
© Keren Kalif
4
drawRoundedRect :Graphics ‫האובייקט‬
© Keren Kalif
5
drawPolygon ‫ שיטות‬:Graphics ‫האובייקט‬
© Keren Kalif
6
setColor ‫ השיטה‬:Graphics ‫האובייקט‬
© Keren Kalif
7
‫האובייקט ‪ :Graphics‬שיטות ‪fill‬‬
‫כשנצייר צורה עם מסגרת קודם‬
‫נבצע ‪ fill‬ורק אח"כ ‪ draw‬כדי‬
‫שקו המסגרת יראה רציף‪.‬‬
‫‪8‬‬
‫‪© Keren Kalif‬‬
fillArcs ‫ שיטות‬:Graphics ‫האובייקט‬
‫כיוון הזווית‬
© Keren Kalif
9
‫שינוי צבע הרקע של ה‪JContainer -‬‬
‫יש לייצר ‪ Rectangle‬ולשים‬
‫אותו על כל רקע ה‪JPanel -‬‬
‫‪© Keren Kalif 10‬‬
setFont ‫ השיטה‬:Graphics ‫האובייקט‬
© Keren Kalif 11
‫ הקיימים‬Font -‫הצגת כל ה‬
© Keren Kalif 12
‫האובייקט ‪ :Graphics‬השיטה ‪)2( setFont‬‬
‫‪ ‬נכתוב תוכנית ובה נציג טקסט ולידו עיגול‬
‫‪ ‬כיצד נדע מה מהו רוחב הטקסט במסך? זה הרי תלוי בגודל הפונט‬
‫‪© Keren Kalif 13‬‬
‫האובייקט ‪:Graphics‬‬
‫שימוש ב‪FontMetrics -‬‬
‫קבלת מידע לגבי רוחב הטקסט‬
‫עם הפונט המבוקש‬
‫‪© Keren Kalif 14‬‬
‫מתי מופעלת השיטה ‪?paintComponent‬‬
‫‪ ‬בכל פעם שהחלון מצייר את עצמו מחדש‪:‬‬
‫‪ ‬הגדלה‪/‬הקטנה‬
‫‪ ‬הצגה מחדש לאחר מיזעור‬
‫‪ ‬הצגה מחדש לאחר שכוסה ע"י חלונות אחרים‬
‫‪© Keren Kalif 15‬‬
‫פרופורציות הציור‬
‫‪ ‬כל אחד מהציורים שראינו קבועים בגודלם‬
‫‪ ‬כלומר‪ ,‬שינוי גודל החלון לא ישנה את פרופורציות הרכיבים‬
‫‪ ‬כאשר גודל החלון משתנה או כאשר הוא חוזר לתצוגה השיטה‬
‫‪ paintComponent‬מופעלת מחדש‬
‫‪© Keren Kalif 16‬‬
‫פרופורציות הציור ‪ -‬הקוד‬
‫‪ ‬כדי שהרכיבים יהיו פרופורציוניים לגודל החלון‪ ,‬יש לקבוע את‬
‫נקודות היחוס והגודל כפונקציה של אורך ורוחב החלון‬
‫‪ getWidth‬ו‪getHeight -‬‬
‫מחזירות את רוחב וגובה‬
‫החלון בהתאמה‬
‫‪© Keren Kalif 17‬‬
‫ציור קו עבה‬
‫נעבוד עם אובייקט מטיפוס‬
‫‪ ,Graphics2D‬שהוא בן של‬
‫המחלקה ‪.Graphics‬‬
‫השיטה שקובעת את עובי הקו‬
‫הגדרת עובי הקו בהתאם‬
‫לרוחב החלון‬
‫‪© Keren Kalif 18‬‬
‫עבודה עם ‪Timer‬‬
‫אובייקט לתיזמון‬
‫מחלקה המגדירה איזו פעולה‬
‫לבצע בכל פעימה של ה‪Timer -‬‬
‫סגירת ה‪Timer -‬‬
‫ציור החלון מחדש ע"י קריאה ל‪repaint -‬‬
‫איננו יכולים להפעיל ישירות את ‪paint‬‬
‫מאחר ואין לנו את האובייקט ‪Graphics‬‬
‫‪© Keren Kalif 19‬‬
‫טקסט נוסע‬
‫מדוע חייבים בכל פעם‬
‫לצייר את הרקע מחדש?‬
‫‪© Keren Kalif 20‬‬
‫חשבשבת מסתובבת (‪)1‬‬
‫‪© Keren Kalif 21‬‬
‫חשבשבת מסתובבת (‪)2‬‬
‫‪© Keren Kalif 22‬‬
‫תרגיל‪ :‬תמרור פרופורציונלי‬
‫‪© Keren Kalif 23‬‬
‫תרגיל‪ :‬כדורים נעים ומתרבים‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫יש לצייר כדור שנע‬
‫כל פגיעה בדופן צידי תחליף את כיוונו (ימין‪/‬שמאל)‬
‫כל פגיעה בדופן עליון או תחתון תחליף את כיוונו (למעלה‪/‬למטה)‬
‫כל פגיעה בדופן תייצר כדור חדש עם צבע רנדומלי שיעבוד בדיוק‬
‫עם אותם חוקים‬
‫‪ ‬יש להגדיר את המחלקה ‪Ball‬‬
‫‪ ‬מה יהיו נתוניה?‬
‫‪ ‬מה יהיו פעולות המחלקה?‬
‫‪© Keren Kalif 24‬‬
25
© Keren
Kalif
:‫ביחידה זו למדנו‬
Graphics ‫האובייקט‬
fill -‫ ו‬draw ‫שיטות‬
Color ‫המחלקה‬
FontMetrics -‫ ו‬Font ‫המחלקה‬
paintComponent ‫מתי מופעלת השיטה‬
‫פרופורציות הציור‬
Timer ‫האובייקט‬







© Keren Kalif 25