כתיבת MouseListener בSWT JAVA - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

כתיבת MouseListener בSWT JAVA


smalery

Recommended Posts

שלום :s07:

אני כותב משחק בOPENGL, ואני רוצה לממש אפשרות שהשחקן יכול לשנות את זוויות הראייה עם העכבר.

אני נתקל בקשיים בכתיבת MouseListener, כלומר ברגע שהמשתמש גורר את הסמן על המסך

אני רוצה להדפיס את הקורדינאטות של מיקום העכבר.

נתנו לי קוד של KeyListener כדי לבדוק איזה מקש מהמקלדת נלחץ ברגע נתון :


@Override
public void keyPressed(KeyEvent k) {
System.out.println("pressed: " + k);
}
});
   composite.addKeyListener(new KeyAdapter() {

ואני מנסה באופן דומה לממש לעכבר:


public void mouseClicked(MouseEvent e){
System.out.println("Click! " + e.x);
}
});
    composite.addMouseListener(new MouseAdapter() {

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

למישהו יש רעיון איך לממש את הlistener?

תודה :)

קישור לתוכן
שתף באתרים אחרים

תודה.

קראתי כבר את המדריך הזה, אבל לא עדין הLISTENER לא עובד.

פשפשתי באינטרנט, אולי הבעיה שאני לא מכוון את הLISTENER לאובייקט המתאים? כי הLISTENER של המקלדת עובד נהדר.

אני מצרף את קטע הקוד שמגדיר את האובייקטים של התצוגה, אולי למישהו יש רעיון:



// this allows us to set particular properties for the GLCanvas
GLCapabilities glCapabilities = new GLCapabilities();

glCapabilities.setDoubleBuffered(true);
glCapabilities.setHardwareAccelerated(true);

// instantiate the canvas
GLCanvas canvas = new GLCanvas(glCapabilities);

// we can't use the default Composite because using the AWT bridge
// requires that it have the property of SWT.EMBEDDED
Composite composite = new Composite(shell, SWT.EMBEDDED);
GridData ld = new GridData(GridData.FILL_BOTH);
composite.setLayoutData(ld);

// the grid layout allows you to add more widgets in the main window.

// set the internal layout so our canvas fills the whole control
FillLayout clayout = new FillLayout();
composite.setLayout(clayout);

// create the special frame bridge to AWT
java.awt.Frame glFrame = SWT_AWT.new_Frame(composite);
// we need the listener so we get the GL events
canvas.addGLEventListener(this);

// finally, add our canvas as a child of the frame
glFrame.add(canvas);

// Add keyboard listener
composite.setFocus();
		shell.setLayout(gridLayout);

תודה :xyxthumbs:

קישור לתוכן
שתף באתרים אחרים

משהו כזה (?) :



canvas.setSize(100,100);

// finally, add our canvas as a child of the frame
glFrame.add(canvas);
		canvas.addGLEventListener(this);

לא שינה כלום...

הLISTENER שאני מנסה הוא :


composite.setFocus();

composite.addMouseListener(new MouseAdapter(){
public void mouseDoubleClick(MouseEvent e){
System.out.println("DoubleClick - " + e.x);
}

public void mouseDown(MouseEvent e){
System.out.println("Down - " + e.x);
}

public void mouseUp(MouseEvent e){
System.out.println("Up - " + e.x);
}
});
		// Add keyboard listener

שמתי אותו לפני הkeyListener.

מה עושים :s05: תודה

קישור לתוכן
שתף באתרים אחרים

היי,

ראשית כל אתה יכול לפתור את הבעיה שלך בעזרת: MouseMoveListener בקלות (ואתה יכול גם MouseTrackListener)...

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

על האובייקט שהוספת לו מאזין - ואז כשאתה "לתומך" חושב שאתה לוחץ על ה COMPOSITE/SHELL אתה בעצם לוחץ על אובייקט אחר

ולכן ה LISTENER לא CALLBACK.

תהנה :xyxthumbs:

קישור לתוכן
שתף באתרים אחרים

תודה.

בסוף עשיתי שה-main יממש את MouseListener, יש מתודות שצריך לממש, ועכשיו עובד.

הבעיה היא שזה של מחלקת awt, מקווה שהבודקים של התרגיל לא יוטרדו מעובדה זה.

תודה רבה לכולם על העזרה :yelclap:

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...