עזרה בתכנות (JAVA)

עזרה בתכנות (JAVA)

ככה. יש לי מערך כפתורים דו-מימדי בתוך מסגרת גרפית שעד שורה מסויימת כל האיברים מאותחלים, ומשורה מסויימת כולם null. עכשיו אני רוצה לבדוק אם כפתור כלשהו אחר, שמיקומו X ו-Y, ממוקם במקרה קרוב לתא לא-מאותחל במערך. אם כן, שהתא הנ"ל יאותחל לערכי הכפתור הלה. עכשיו אני לא יודע איך לבדוק ולהגיד לו לאיזה תא למקמו. אם ההתאמה שלו לתא מסויים לא מלאה, לא הצלחתי שידע איפה למקם (אם כאן, בתא משמאל שאולי יותר קרוב, או בתא מימין שיותר קרוב לשיעורים שלו..) אם מישהו יוכל לעזור לי בקטע תוכנה של הבעיה הזו. חשבתי וחשבתי וניסיתי וניסיתי, ותמיד זה מצליח ב50% מהמקרים... כאילו משהו לא מדוייק. תודה!!! אם מישהו לא מסתדר עם Button שיתייחס למערך ולעצם כאל דברים אחרים. רק חשוב המיקום שלהם על המסך.
 

somebodddy

New member
קשה להבין למה אתה מתכוון

אתה יכול אולי להסביר עם שרטוט?
 
הנה הסבר:

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

somebodddy

New member
הפתרון הכי פשוט ויעיל

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

לכתוב ככה:
for (int i=0;i<=14;i++) for (int j=0;j<=18;j++) if (ar[j].contains(b1[num].getX()+10,b1[num].getY())) { ....... ........ }
 

somebodddy

New member
קודם כל, אתה מתעלם מהגובה של הכפתור

גם על ציר הY יש לו מימדים שצריך להתחשב בהם. קוארדינטת הY של המרכז שלו היא קוארדינטת הY של הכפתור ועוד מחצית הגובה שלו. אבל יותר חשוב - אתה פועל בצורה נורא חלמאית. אם יש לך כבר גריד, אתה לא צריך לבדוק כל תא ותא כדי לדעת באיזה מהם נמצאת נקודה מסויימת - אפשר להגיע לזה בצורה הרבה יותר מהירה ופשוטה באמצעים מתמטים. נדגים לציר הX בהנחה שj מייצג את הנקודות על ציר הX:
int AR_CELL_WIDTH=ar[0][0].getWidth(); int AR_X=ar[0][0].getX(); int buttonCenterX=b1[num].getX()+b1[num].getWidth()/2; int buttonPosInArrX=(buttonCenterX-AR_X)-AR_CELL_WIDTH;​
כמובן, יצרתי את כל המשתנים לצורך נוחיות ההסבר, ואפשר לשים את הכל בתוך שורה אחת.
 

somebodddy

New member
אתה לא צריך תנאי.

יש לך את buttonPosInArrX, ואתה עושה אותו דבר על ציר הY ומקבל buttonPosInArrY. בהנחה שהמערך שלך מסודר ככה שהאינדקס הראשון הוא של ציר הX והאינדקס השני הוא של ציר הY, אתה יכול לגשת ישירות לתא שהכפתור נמצא בו:
arr[buttonPosInArrX][buttonPosInArrY]​
כמובן, כדאי לוודא שbuttonPosInArrX וbuttonPosInArrY לא חורגים מגבולות המערך...
 

ahillel

New member
מ.ש.ל

אם לא מסתדר תכתוב את הקוד. אולי סתם יש לך טעות בתחביר OOP.
 
למעלה