הסרת רכיבי guy בזמן ריצת תוכנה java

  • פותח הנושא kawa
  • פורסם בתאריך

kawa

New member
הסרת רכיבי guy בזמן ריצת תוכנה java

שלום, בניתי משחק חמש בשורה בג´אווה. אני רוצה לשדרג אותו כך שלחיצה על כפתור צדדי תביא להסרת כל רכיבי המשחק - אשר נמצאים בחלק המרכזי של המסגרת , ובניית רכיבי המשחק מחדש על פי התאמה אישית. לוח המשחק של ´חמש בשורה´ יכול להיות החל מגודל 8*8 ועד גודל 30*30 - כאשר לחיצה על הכפתור ההתאמה האישית מסיר את את רכיבי הממשחק של 8*8 נאמר, ו´בונה מחדש´ על פי בקשת היוזר ממשק שהינו 17*17 לדוגמא. השאלות הנשאלות הן שתיים 1. האם וכיצד בזמן ריצת תוכנה ניתן להסיר כפתורים מ componenet ולהרכיבם מחדש? מהי הפקודה ? 2.האם קיימת איזושהי פקודה הדומה במהותה ל´ריפרש´ או ´ריפיינט´ אשר במידה והוסרו הכפתורים , והושמו במקומם חדשים יש צורך בפקודה שתעשה משהו הדומה ל´ריפיינט´
תודה
kawa
 

voguemaster

New member
נו מילא... לא אומרים GUI ?? ../images/Emo13.gif

בנוגע לשאלה, אז כך: אם תפני את תשומת הלב שלך אל ה-API של ג´אווה תוכלי לראות שקיימת מתודה שנקראת removeAll בכל מיכל (Container), או ספציפית ניתן להוציא רכיבים בודדים ע"י remove. בכל מקרה, לא פה הקודי לדעתי. עד כמה שידוע לי, אם המיכל שלך, נניח Panel, נמצא בתוך מיכל אחר (ה-Applet שכתבת או לחלופין החלון של היישום שכתבת), לא תוכלי להוסיף לו רכיבים בחזרה. עד כמה שידוע לי לא ניתן להוסיף רכיבים למיכל שנמצא בתוך מיכל אחר. במקרה כזה תיאלצי גם להוציא את הפאנל עצמו ולהוסיף לו רכיבים מחדש ולהוסיף אותו בחזרה, ואולי אז. זה יוצר שאלה מעניינת לגבי איך מטפלים באירועים עבור הרכיבים החדשים אבל ניחא. יש עוד דבר. מה לגבי החזרת המשאבים שדרשו אותם רכיבים שהסרת ?? אחרי כמה משחקים יכול להיווצר מצב שהקצת יותר מדי כפתורים ורכיבים אחרים. אני מציע לאחר הסרת רכיב, גם להסיר כל reference אל המשתנה שלו ואל חבריו ואז לבצע garbage collection. בקשר לשאלה השניה, אפשר להשתמש ב-paint או update, אני כבר לא זוכר.. אני מציע לך לשקול אופציה אחרת. לדוגמא אופצית חלון נפרד עבור לוח המשחק תהיה קלה יותר, כך תוכלי פשוט "לייצר" לוח מחדש מבלי להתעסק עם הסרת רכיבים וניקוי המשאבים שלהם. אולי נדמה לנו שג´אווה פותרת את כל בעיות הזבל שיש, אבל לא תמיד זה כך, רק ברוב המקרים. אם תעבדי חלילה וחס ב-AWT, תיווכחי שכל כפתור ולמעשה כמעט כל רכיב הוא למעשה מיושם חלקית לפחות ע"י מערכת ההפעלה (כפתור הוא כפתור של מע´ ההפעלה) ולמערכת ההפעלה (לפחות ל-98) יש מגבלה מעצבנת של עד 16384 ידיות חלון, לכן חשוב לנקות אחריך. בקיצור ולעניין, אם החלטת ללכת בגישת ההסרה, מומלץ לך בחום לדאוג שהרכיבים ינוקו. אלי
 

kawa

New member
כן, כן אומרים gui ../images/Emo13.gif

אז ככה. ראשית אני עובדת ב awt ולא בסווינג כי המטרה שלי היא לא ממשק מפואר אלא דווקא המבנה ה´מודולרי´ וה´מונחה עצמים´ של התוכנית שלי. אם אני מבינה אותך נכון - במקרה הזה המיכל הבסיסי שלי הוא Frame . כלומר אני יכולה להשאיר את הפריים ולבנות על הפריים את כל הדברים מחדש (אני לא ממש אבנה - אני כבר בניתי אותם ורק אקרא למתודה שבונה אותם )- השאלה היא וכאן נשאר הספק שלי - האם נדרשת מתודה המקבילה ל repaint
טוב, לפני שאני אמשיך הלאה אני הולכת לבנות תוכנית בדיקה ( קרי תוכנית שאין לה תכלית לבד מלבדוק פעולת דבר מסויים ) שבה יש פריים עם רכיבים וכפתור שאמור להסיר אותם ולבנות חדשים במקומם.אז נראה מה רלוונטי החל מתום ה´ניסוי´ בכל מקרה. תודה תודה
בכל מקרה
 

voguemaster

New member
עצה ידידותית

עזבי אותך מ-AWT, אני עשיתי את הטעות והלכתי על זה כשבניתי ממשק גרפי, ואני אצטרך להמיר את כל הרכיבים ל-SWING. אני כמובן לקחתי כבר בחשבון את "העלות" של להתקין במחשב את ה-JRE, אבל זה לא מה שמפריע לי. לדוגמא, קשה יותר ליצור כפתורים עם מראה מיוחד או CUSTOM אם תרצי. בכל מקרה, יש עוד כמה יתרונות מעבר לשינוי בשיטת הטיפול באירועים. מומלץ בחום!
אלי
 

kawa

New member
אשמח לשמוע עוד פרטים על הסווינג

שכמובן שכבר שמעתי שה awt הוא ממשק דוס לעומתו. בכל מקרה- כיצד זה בדיוק כרוך בעלות כספית ????
בכל מקרה- הרגע עשיתי ניסוי ( אני לא מאמינה שיש לי כזאת סבלנות) בניתי מסגרת עם פאנלים ומטפל אירועים שבלחיצת כפתור ´מעיף´ את הפאנלים וזה עבד גם עבד אז תודה
 

kawa

New member
החמור אייה מפו הדוב

היה לו איזה קטע שהוא קיבל במתנה מחזרזיר ומפה דלי דבש ובלון אלא שחזרזיר פוצץ את הבלון ופו לא התאפק ואכל את כל הדבש קרי איה קיבל כלי דבש ריק ובלון מפוצץ- וכל היום הכניס והוציא את הבלון מן הדלי. אז הנה מצאתי דרך ליצור מסגרת שבה כפתור ש´מעיף´ את הרכיבים ומחזיר אותם
 

voguemaster

New member
לא העלות הזו...

ה-GUI שפיתחתי הוא GUI מיוחד שנועד כדי לבצע אדמיניסטרציה מרחוק לשרת, מעל TCP (כלומר, דרך ה-LAN, בעזרת TCP). ה-GUI יותר מורכב מסתם ממשק משתמש טיפוסי כי יש הרבה עיבוד ברקע, אבל לענינינו, בניתי אותו תחילה עם AWT, כדי שיהיה תואם JAVA גרסא 1.1 וכד´. הסיבה הייתה שרציתי תאימות מסוימת. רציתי שאותו משתמש או למעשה ADMIN יוכל לגשת לכל דפדפן ולהפעיל את העניין, עם ססמא כמובן
בכל מקרה, גיליתי שאני איאלץ בין כה לעבוד עם מחלקות שלא נתמכות באופן רגיל ע"י ה-JVM של דפדפנים, אז אם כבר אני צריך לתת תמיכה לזה, אני כבר אתקין עליהם JRE שכולל PLUGIN כמובן. זאת העלות שאני משלם: העובדה שאני קובע ספציפית באיזה מחשב אותו אדם יהיה חייב לעבוד כדי לעבוד מול ה-GUI הזה. מסתבר שזה יוצא לטובה...
אם אני ארצה שהוא יעבוד ממחשב אחר צריך להתקין גם שם JRE ואת כל הדברים האחרים הנלווים כדי שהכל יעבוד כמו שצריך, כמו לדוגמא JCE, JSSE.. בכל אופן, זה מחיר מסוים שאני משלם עבור תמיכה טובה יותר בהכל, אבל אם כבר אני עושה את זה, אז למה לא לעבוד בצורה הכי חדשה שאפשר ? מודל ניהול האירועים יותר טוב מגרסא 1.2 ו-SWING אלו מחלקות שדורשות PLUGIN, אבל כל עוד יש לי, למה לא לעבוד עם הרכיבים שמתנהגים טוב יותר ובעיקרון הם יותר גמישים ?? לכן אני אמיר את כל העניין ל-SWING כולל את טיפול האירועים, אבל זאת רק עבודה שחורה, אני מתנחם בזה
אלי
 

kawa

New member
../images/Emo5.gif ואללה

אני מתייחסת למילים בהודעתך , אם המיכל שלך, נניח Panel, נמצא בתוך מיכל אחר (ה-Applet שכתבת או לחלופין החלון של היישום שכתבת), לא תוכלי להוסיף לו רכיבים בחזרה. עד כמה שידוע לי לא ניתן להוסיף רכיבים למיכל שנמצא בתוך מיכל אחר. במקרה כזה תיאלצי גם להוציא את הפאנל עצמו ולהוסיף לו רכיבים מחדש ולהוסיף אותו בחזרה, ואולי אז. אז זהו
שלא
 

kawa

New member
האם swing יצילני בנושא זה ../images/Emo35.gif ../images/Emo12.gif

 

kawa

New member
../images/Emo47.gif מצאתי ../images/Emo70.gif

טטוף סליחה שאני מדברת לעצמי רק שלתוכניתנים יש רזומה של מוזרים אז לא אכפת לי. אם אי אפשר להסיר רכיבים ואז להוסיף במקומם רכיבים הבנויים על רכיבים יוצרים רכיב שמכיל בתוכו רכיב על רכיב ( כזה שיורש מ Panel ) ומחזירים רק אותו ל Frame . אוי oop
 
למעלה