Hello Guest

MouseListeners on AWTGLCanvas not triggering events

  • 6 Replies
  • 10050 Views
*

emzic

MouseListeners on AWTGLCanvas not triggering events
« on: July 23, 2010, 12:07:19 »
hi,
i try to add a MouseMotionListener to the AWTGLCanvas, but it seems that no mouseevent are being triggered. is there something special that needs to be taken care of? (it is working on a GLCanvas from jogl)

unfortunately i cannot use the Mouse helperclass from the LWJGL utils.

thanks!

*

Offline kappa

  • *****
  • 1316
Re: MouseListeners on AWTGLCanvas not triggering events
« Reply #1 on: July 23, 2010, 13:22:44 »
Instead of AWTGLCanvas you could use LWJGL Display.setParent(). With Display.setParent you can just use LWJGL's normal Keyboard and Mouse classes

info

*

Offline kappa

  • *****
  • 1316
Re: MouseListeners on AWTGLCanvas not triggering events
« Reply #2 on: July 23, 2010, 14:56:32 »
thanks!
actually i do use Display.setParent on my AWTGLCanvas. but now where should i add my mouselisteners if not on the canvas?



oh wait, thats the wrong way to do it, you don't use Display.setParent() & AWTGLCanvas together. You either use AWTGLCanvas or Display.setParent(). Both are different methods of embedding LWJGL with AWT. Display.setParent() is slightly faster then using AWTGLCanvas though.
« Last Edit: July 23, 2010, 14:58:07 by javalwjgl »

*

Offline kappa

  • *****
  • 1316
Re: MouseListeners on AWTGLCanvas not triggering events
« Reply #3 on: July 23, 2010, 15:03:38 »
thanks!

ok so i converted my AWTGLCanvas to a normal java.awt.Canvas, but now i am getting this exception.

org.lwjgl.LWJGLException: Parent.isDisplayable() must be true
   at org.lwjgl.opengl.Display.createWindow(Display.java:310)
   at org.lwjgl.opengl.Display.create(Display.java:855)
   at org.lwjgl.opengl.Display.create(Display.java:783)
   at org.lwjgl.opengl.Display.create(Display.java:764)

This error basically tells you that the canvas is not yet ready and you are attempting to create and stick a Display on it.

if you look at the gearsapplet you will see that the addNotify and removeNotify methods of the canvas are used to create the Dispaly. This will create the Display when the canvas is ready.

*

Offline kappa

  • *****
  • 1316
Re: MouseListeners on AWTGLCanvas not triggering events
« Reply #4 on: July 23, 2010, 16:15:57 »
well since you are using a Native Display you can just wrap the LWJGL Mouse class to create your own mouse listener. See source code of Slick2D for a nice example on how to do this.

*

Kai

Re: MouseListeners on AWTGLCanvas not triggering events
« Reply #5 on: July 29, 2010, 17:41:18 »
Hi,

I am having no troubles with AWTGLCanvas and mouse listeners. To find out what is going wrong with your code, please first try the following simple test case:
Code: [Select]
    public static void main(String[] args) throws Exception {
        JFrame frame = new JFrame("Mouse Test");
        AWTGLCanvas canvas = new AWTGLCanvas() {
            protected void paintGL() {
                GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
                try {
                    swapBuffers();
                } catch (LWJGLException e) {
                }
            }
        };
        frame.setSize(200, 200);
        frame.getContentPane().add(canvas);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        canvas.addMouseMotionListener(new MouseMotionListener() {
            public void mouseMoved(MouseEvent e) {
                System.out.println(e);
            }

            public void mouseDragged(MouseEvent e) {
                System.out.println(e);
            }
        });
        frame.setVisible(true);
    }

Re: MouseListeners on AWTGLCanvas not triggering events
« Reply #6 on: July 29, 2010, 21:02:10 »
there's a way to disable LWJGL input Mouse and keyboard listeners, http://lwjgl.org/forum/index.php/topic,637.msg4540.html#msg4540 .