פורסם 2008 באוגוסט 617 שנים שלום אני כותב משחק ב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? תודה
פורסם 2008 באוגוסט 617 שנים http://java.sun.com/docs/books/tutorial/uiswing/events/mouselistener.html
פורסם 2008 באוגוסט 617 שנים מחבר תודה. קראתי כבר את המדריך הזה, אבל לא עדין ה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); תודה
פורסם 2008 באוגוסט 717 שנים מחבר משהו כזה (?) : 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: תודה
פורסם 2008 באוגוסט 1117 שנים היי, ראשית כל אתה יכול לפתור את הבעיה שלך בעזרת: MouseMoveListener בקלות (ואתה יכול גם MouseTrackListener)... שנית לגבי הקוד שאתה טוען שלא עובד לך - אתה צריך לשים לב איפה אתה לוחץ מכיוון שישנם לפעמים אובייקטי GUI שונים שנמצאים על האובייקט שהוספת לו מאזין - ואז כשאתה "לתומך" חושב שאתה לוחץ על ה COMPOSITE/SHELL אתה בעצם לוחץ על אובייקט אחר ולכן ה LISTENER לא מבצע CALLBACK. תהנה
פורסם 2008 באוגוסט 1117 שנים מחבר תודה. בסוף עשיתי שה-main יממש את MouseListener, יש מתודות שצריך לממש, ועכשיו עובד. הבעיה היא שזה של מחלקת awt, מקווה שהבודקים של התרגיל לא יוטרדו מעובדה זה. תודה רבה לכולם על העזרה
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.