2011-12-10 79 views
0

我的最終目標是能夠使用Java中的其他鼠標按鈕。目前,LWJGL的JInput似乎無法檢測到三個以上的按鈕。爲了使用Java的System.setProperty(「sun.awt.enableExtraMouseButtons」,「true」),我嘗試在JFrame中將顯示裝載到AWT畫布上。不幸的是,這似乎並不奏效,我不確定原因。 [我要指出,我已經從Java走了一段時間]安裝在畫布上的LWJGL顯示器無法生成鼠標事件

import java.awt.Canvas; 
import java.awt.event.MouseListener; 
import java.awt.event.MouseEvent; 

import javax.swing.JFrame; 

import org.lwjgl.LWJGLException; 
import org.lwjgl.opengl.Display; 
import org.lwjgl.opengl.DisplayMode; 
import org.lwjgl.opengl.GL11; 

public class MainCanvas extends Canvas implements MouseListener 
{ 
    private static final long serialVersionUID = 1L; 

    public void mouseClicked(MouseEvent e) 
    { 
     System.out.println(e.getButton()); 
    } 
    public void mouseEntered(MouseEvent e) 
    { 
     System.out.println(e.getButton()); 
    } 
    public void mouseExited(MouseEvent e) 
    { 
     System.out.println(e.getButton()); 
    } 
    public void mousePressed(MouseEvent e) 
    { 
     System.out.println(e.getButton()); 
    } 
    public void mouseReleased(MouseEvent e) 
    { 
     System.out.println(e.getButton()); 
    } 

    public void init() 
    { 
    } 


    public static void main(String[] args) 
    { 
     MainCanvas mainCanvas = new MainCanvas(); 
     JFrame mainFrame = new JFrame("Simplify"); 

     mainFrame.setSize(640, 480); 
     mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     mainFrame.getContentPane().add(mainCanvas); 
     mainFrame.setVisible(true); 

     mainCanvas.addMouseListener(mainCanvas); 

     try 
     { 
      DisplayMode mainDisplay = new DisplayMode(640, 480); 
      Display.setDisplayMode(mainDisplay); 
      Display.setParent(mainCanvas); 
      Display.create(); 
     } 
     catch (LWJGLException le) 
     { 
      System.out.println("Oh dear."); 
     } 

     GL11.glMatrixMode(GL11.GL_PROJECTION); 
     GL11.glLoadIdentity(); 
     GL11.glOrtho(0, 640, 480, 0, 1, -1); 
     GL11.glMatrixMode(GL11.GL_MODELVIEW); 

     while (!Display.isCloseRequested()) 
     { 
      GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT); 
      GL11.glColor3f(0.5f,0.5f,1.0f); 
      GL11.glBegin(GL11.GL_QUADS); 
       GL11.glVertex2f(100,100); 
       GL11.glVertex2f(100+200,100); 
       GL11.glVertex2f(100+200,100+200); 
       GL11.glVertex2f(100,100+200); 
      GL11.glEnd(); 
      Display.update(); 
     } 
     Display.destroy(); 
    } 
} 

回答

1

幾個月前,我與FreeNode IRC的研究員進行了交談。要點是因爲畫布是一個重量級的組件,事件不會上升到JFrame級別。必須使用框架代替。

+0

不幸......我希望使用具有LWJGL Swing的事件框架。有沒有解決方法? – Xyene

0

嘗試添加鼠標監聽到JFrame來代替。我之前遇到過這種情況,我想我就是這樣解決它的。