Java Applets

guznik

New member
Java Applets

אהלן. כתבתי ישומון שיש בו כפתור שבלחיצה עליו אני רוצה לנקות את כל מה שיש על הישומון ולצייר עליו באמצעות אובייקט Graphics. הבעיה היא שאני לא מצליח לצייר כמו שצריך בכל מקום למעט במתודה paint. הנה האפשרויות שניסיתי: 1. לבצע remove לכל האובייקטים ואז לצייר באמצעות getGraphics(). מה שקרה זה שהיישומון לא התנקה והציורים הופיעו על הישומון עם כל מה שהיה בו קודם. במקרה זה אחרי שממזערים את היישומון או סתם מזיזים אותו מחוץ למסך ובחזרה הוא מתנקה לגמרי. 2. להוסיף אובייקט Canvas שיכסה את כל מה שיש על הישומון ואז לצייר עליו או על הישומון. היישומון התנקה והציורים הופיעו, אבל איך שאני מזיז את העכבר הציורים נעלמים. 3. לקרוא ל-repaint() ואח"כ לצייר. אני רואה לשבריר שניה את הציורים ומייד כל הישומון מתנקה. ניסיתי גם לשים wait ארוך בין ה-repaint() לפקודות הציור, אבל התוצאה לא השתנתה. מה שבסוף עשיתי זה לשים את כל פקודות הציור במתודה paint() ולהתנות את הציור באיזה דגל כדי שזה לא יתבצע בהתחלה. בארוע הלחיצה אני משנה את הדגל וקורא ל-repaint(). זה עובד יופי (הישומון מתנקה והציורים החדשים נשארים) אבל זה נראה לי מאוד מעוות - מה אם היה לי אלגוריתם מסובך יותר? אין דרך לצייר נורמלי מחוץ ל-paint()? תודה לעונים.
 

voguemaster

New member
לשאלתך אין

הרעיון של paint הוא מקום מרוכז שבו כל פונקציות הציור יבוצעו. מה שעשית הוא לא רע בעיקרון, אתה שומר state של מה צריך לצייר בכל "מצב" של ה-applet. מה שאולי אתה יכול לעשות והוא טיפה'לה יותר מתוחכם הוא להשתמש ב-CardLayout שב"כרטיס" אחד יש לך את הכפתור וכד' ובכרטיס נוסף את ה-canvas שעליו תצייר. בקליק של הכפתור אתה עובר ל-card של ה-canvas ושם אתה כבר יכול לטפל באירועים בנפרד (אם זכור לי נכון)
 

CoolerMaster

New member
קודם כל

אפשר למחוק את שטח הישומון. לדוגמה:
Graphics g = getGraphics(); g.setColor( backgroundColor ); g.fillRect(0, 0, getWidth(), getHieght() );​
ואחר כך אפשר לצייר. אבל אם מציירים בפונקציה אחרת (לא ב-paint), אז אם חלון יסתיר את הישומון, הציור ימחק. חוץ מזה יש כאן לינק לאתר של סאן שמדבר על ציור.
 
למעלה