Insane Java Canvas

sitUBUsit

New member
Insane Java Canvas

יצרתי תוכנה שיש ב-form שלה Canvas ו-JMenuBar. עכשיו, כשאני לוחץ על ה-menu, כל ה-menu items שבו מוסתרים ע"י ה-Canvas. אני יכול לראות את התפריט אם אני עושה
setVisible(false);​
ל-Canvas. אני לא מעוניין לעשות את זה מסיבות ברורות. חיפשתי איזשהו שדה או מתודה שתשלח את ה-Canvas אל מאחורי התפריט ללא הצלחה. אם למישהו יש עצה אני אהיה אסיר תודה.
 

Zack DA

New member
היי תום,

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

sitUBUsit

New member
אוקיי...שכנעת אותי

התוכנה שלי די ענקית וכוללת הרבה קלאסים ושאר ירקות, אז אני מעלה גירסה מצומצמת שמייצגת יפה את הבעיה שלי. כשמריצים את התוכנה לא ניתן לראות את התפריט שיוצא מ-File, כי ה-Canvas מסתיר אותו. בשורה 41 בקובץ ניתן להוריד את ההערה ולראות מה קורה כשמסתירים את ה-Canvas (ניתן לראות את התפריט). כאמור, לא רצוי להסתיר את ה-Canvas. שמתי פה שני קלאסים בקובץ אחד, אני מקווה שזה לא ירגיז אף אחד (מצד שני, זה מתקמפל).
 

selalerer

New member
היי, לא מבין בJava אבל לא כדאי שכל

פעם אחרי שאתה עושה ()c.repaint תקרא גם למטודת הציור של הmenu שלך?
 

sitUBUsit

New member
לא...../images/Emo26.gif

שמתי שם repaint מסיבה אחרת - כדי להריץ את האנימציה שלי. השמטתי את קטע הקוד הזה מפה ולכן שורת ה-repaint בדוגמה ששלחתי לפורום היא חסרת משמעות לחלוטין. ג'אווה דואגת לעשות repaint בכל המקרים הברורים מאליהם - של minimize, resize וכו'. אני עשיתי זאת פה באופן מפורש משום שברגע שזיהיתי לחיצה על אנימציה בתפריט אני רוצה להפעיל אותה ב-Canvas. מתודת ה-paint שלי יודעת שהכפתור הוא זה שזימן אותה לפי משתנה בוליאני (שהשמטתי מפה), וכך יודעת לעשות אנימציה רק ב-repaint הנ"ל ולא ב-repaint שג'אווה מזמנת. בקיצור - השורה הנ"ל לא רלוונטית, ולא שמתי לב לזה כשהעליתי את זה...
 
למעלה