2011-12-11 113 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時添加任何偵聽器(是的,您的應用正在創建它們)。

相關問題