ABA


"ג'אווה - צריך עזרה עם swing ואירועים"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #10255 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 10255
חומוס לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 22.4.02
13069 הודעות, 5 פידבק
   16:22   05.02.11   
אל הפורום  
  ג'אווה - צריך עזרה עם swing ואירועים  
 
המצב הוא כזה

אני יוצר דינמית מערך של 30 JPanels.
יש לי קלאס שמממש mouselistener שתפקידו זה לטפל באירועים של הפאנלים(לדוגמא, לחיצה על הפאנל).
אני מצמיד אותו כליסנר לכל הפאנלים.
השאלה שלי היא איך אני אמור לדעת מי הוא הפאנל שהפעיל את האירוע? על מנת
שאני אוכל לעשות שינויים באותו הפאנל.

נניח ופאנל מספר 7 במערך הפעיל את האירוע... איך אני יכול לדעת באותו
מקום שמטפל באירוע, שמספר 7 במערך הפעיל אותו?

הנה הקטע קוד:
https://rotter.name/User_files/nor/4d4d5ccb783f0fa8.txt


תודה


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  הסתדרתי אפשר למחוק חומוס 05.02.11 17:57 1
  בלי קשר לשאלה שלך כי הסתדרת, XpDuDe  05.02.11 19:41 2
     מה הכוונה עם עם GridLayout? חומוס 05.02.11 20:25 3
  עוד שאלה ברשותכם: חומוס 05.02.11 20:45 4
     יעזור אולי שתסביר מה בידיוק אתה מנסה לעשות... XpDuDe  05.02.11 20:59 5
         ההסבר הכי פשוט זה מה שנתתי בהודעה למעלה חומוס 06.02.11 00:15 6
     למה אתה רץ בלולאה בכלל? אם יש לך getSource Ice Cold  06.02.11 11:06 7
         אני לא רק רוצה לדעת מי לחץ.. אני צריך גם את המיקום חומוס 06.02.11 16:06 8

       
חומוס לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 22.4.02
13069 הודעות, 5 פידבק
   17:57   05.02.11   
אל הפורום  
  1. הסתדרתי אפשר למחוק  
בתגובה להודעה מספר 0
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
XpDuDe 
חבר מתאריך 16.5.10
1046 הודעות
   19:41   05.02.11   
אל הפורום  
  2. בלי קשר לשאלה שלך כי הסתדרת,  
בתגובה להודעה מספר 0
 
   אבל אתה יכול להשתמש ב-Layout כמו GridLayout למשל ואז לא תצטרך לחשב את הגדלים והמיקומים בצורה ידנית.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
חומוס לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 22.4.02
13069 הודעות, 5 פידבק
   20:25   05.02.11   
אל הפורום  
  3. מה הכוונה עם עם GridLayout?  
בתגובה להודעה מספר 2
 
לא הבנתי איך זה פותר את הבעיה..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
חומוס לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 22.4.02
13069 הודעות, 5 פידבק
   20:45   05.02.11   
אל הפורום  
  4. עוד שאלה ברשותכם:  
בתגובה להודעה מספר 0
 
כפי שציינתי, אני מצמיד לכל הפאנלים ליסנר שהכנתי
זהו המימוש של הליסנר:

public class PanelsDrag extends MouseMotionAdapter
{

@Override
public void mouseDragged(MouseEvent me)
{
for (int i = 0; i < 30; i++)
{
if (me.getSource() == panels[i])
{
panels[i].setLocation(panels[i].getX() + me.getX() - panels[i].getWidth() / 2, panels[i].getY() +me.getY() - panels[i].getHeight() / 2);
}
}
}

ההצמדה נעשית בלולאת פור עד 30, כאשר כל פאנל מקבל:


panels[size].addMouseMotionListener(panelsDrag);


הבעיה שאם אני גורר פאנל מעל פאנל, הוא תמיד שם מעל את הפאנל שהוצמד
ראשון לליסנר, ומתחת את הפאנל שהוצמד אחרי.
לדוגמא, אם אני גורר את הפאנל 0 (שהוצמד ראשון) מעל הפאנלים האחרים, אז
הוא באמת מראה אותם מעליהם, לעומת זאת, אם אני גורר את פאנל 29 (האחרון), אז אם אני גורר אותו מעל הפאנלים האחרים- הוא מציג אותו מתחתם.

איך אני אמור לטפל בדבר כזה?

תודהההה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
XpDuDe 
חבר מתאריך 16.5.10
1046 הודעות
   20:59   05.02.11   
אל הפורום  
  5. יעזור אולי שתסביר מה בידיוק אתה מנסה לעשות...  
בתגובה להודעה מספר 4
 
   בכל מקרה יש פונקציה toFront לפאנל, תנסה אולי להפעיל אותה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
חומוס לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 22.4.02
13069 הודעות, 5 פידבק
   00:15   06.02.11   
אל הפורום  
  6. ההסבר הכי פשוט זה מה שנתתי בהודעה למעלה  
בתגובה להודעה מספר 5
 
בכל אופן הסתדרתי.. השתמשתי במטודה setComponentZOrder

תודה לבנתיים


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק
   11:06   06.02.11   
אל הפורום  
  7. למה אתה רץ בלולאה בכלל? אם יש לך getSource  
בתגובה להודעה מספר 4
 
שמחזיר panel, למה לא להשתמש רק בו?

משהו בסגנון:


public class PanelsDrag extends MouseMotionAdapter
{
@Override
public void mouseDragged(MouseEvent me)
{
me.getSource().setLocation(me.getSource().getX() + me.getX() - me.getSource().getWidth() / 2, me.getSource().getY() +me.getY() - me.getSource().getHeight() / 2);
}
}

לא חבל על הלולאה?

והשתמשתי ב-getSource כל פעם כי אני לא יודע מה ה-TYPE של panel כדי להציב לו משתנה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
חומוס לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 22.4.02
13069 הודעות, 5 פידבק
   16:06   06.02.11   
אל הפורום  
  8. אני לא רק רוצה לדעת מי לחץ.. אני צריך גם את המיקום  
בתגובה להודעה מספר 7
 
המדוייק של הפאנל (במערך הפאנלים) שהפעיל את האירוע כי אני משתמש במיקום הזה לדברים אחרים
שכחתי לציין את זה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net