2011-12-11 81 views
1

我想从com.jogamp.newt.event.MouseListener 添加的MouseListener到GLAutoDrawable这样的:为什么GLAutoDrawable没有方法addMouseListener将

/* inside the class that implements GLEventListener */ 
@Override 
    public void init(GLAutoDrawable drawable) { 
     keyMaster = new KeyMaster(); 
     drawable.addMouseListener(keyMaster); 
    } 

GLAutoDrawable是从包javax.media。 opengl.GLAutoDrawable。 Eclipse说,没有addMouseListener方法。

但在http://download.java.net/media/jogl/builds/spec/prd/jsr-231-prd-javadoc/index.html 他们说,它继承了接口ComponentEvents,它有这种方法。

我也在http://download.java.net/media/jogl/jogl-2.x-docs/index.html?javax/media/opengl/GLAutoDrawable.html上发现,没有ComponentEvents接口作为超类。

这怎么可能。我发现很多使用drawable.addMouseListener的示例(...)

我该怎么办?

回答

0

也许这可以澄清你。 GLDrawable是一个由GLCanvas实现的接口。 GLDrawable可以附加一个GLEventListener(所以GLCanvas实现'addGLEventListener'方法)。

GLCanvas是awt.canvas的子类 - > awt.component,因此您可以向其注册鼠标侦听器。

GL事件注册在GLDrawable上。 鼠标,keuboard等事件在画布上注册。

0

正如尼尔所说,GLAutoDrawable是一个接口。您得到的实际类可能是GLCanvas或GLJPanel,它们都可以将鼠标监听器连接到它们。

但是您不应该在init()中添加鼠标侦听器。 init()不仅在组件第一次创建时被调用 - 只要系统需要重新初始化GL,可以调用init(),并且可以在组件的整个生命周期内多次调用它。在创建GLCanvas或GLJPanel时添加任何侦听器(是的,您的应用正在创建它们)。

相关问题