gpt4 book ai didi

java - 安装在 Canvas 上的 LWJGL 显示器无法生成鼠标事件

转载 作者:行者123 更新时间:2023-12-02 08:03:57 25 4
gpt4 key购买 nike

我的最终目标是能够在 Java 中使用额外的鼠标按钮。目前,LWJGL 的 JInput 似乎无法检测超过三个按钮。为了利用 Java 的 System.setProperty("sun.awt.enableExtraMouseButtons", "true"),我尝试将 Display 安装到 JFrame 内的 AWT Canvas 上。不幸的是,这似乎不起作用,我不确定为什么。 [我应该指出,我已经离开 Java 一段时间了]

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();
}
}

最佳答案

几个月前我与 FreeNode IRC 的研究员进行了交谈。要点是因为canvas是一个重量级组件,事件不会上升到JFrame级别。必须使用框架来代替它。

关于java - 安装在 Canvas 上的 LWJGL 显示器无法生成鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8460514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com