【发布时间】:2015-05-27 04:14:41
【问题描述】:
我正在使用 java 和 LWJGL。我为画布创建了一个鼠标侦听器,但是当我将 Displays 父级设置为画布时,它不起作用。
鼠标处理程序类:
private static class handlerClass implements MouseListener {
public handlerClass() {
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Canvas clicked");
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
}
这是我在 DisplayManager 类中将画布设置为父级的地方:
public void createDisplayJFrame(Canvas canvas) {
ContextAttribs attribs = new ContextAttribs(3, 2).withForwardCompatible(true).withProfileCore(true);
try {
Display.setDisplayMode(new DisplayMode(WIDTH, HEIGHT));
Display.setParent(canvas);
Display.create(new PixelFormat(), attribs);
} catch (LWJGLException ex) {
//System.out.println(ex);
}
GL11.glViewport(0, 0, WIDTH, HEIGHT);
lastFrameTime = getCurrentTime();
}
这里是我添加 MouseListener 的地方:
public class UIMain extends javax.swing.JFrame {
/**
* Creates new form UIMain
*/
private static Canvas canvas;
public static DisplayThread dt;
HandlerClass handler = new HandlerClass();
public UIMain() {
initComponents();
canvas = new Canvas();
canvas.addMouseListener(handler);
canvas.setSize(500, 500);
canvas.setBackground(Color.WHITE);
canvas.isDisplayable();
canvas.setVisible(true);
jPanel2.add(canvas, BorderLayout.CENTER);
}
我的 DisplayThreadClass:
public class DisplayThread extends Thread {
private Canvas canvas;
ArrayList<Entity> entities = new ArrayList();
public DisplayThread(Canvas canvas) {
this.canvas = canvas;
}
public void run() {
new DisplayManager().createDisplayJFrame(canvas);
//Created entities and added to entities
......
MasterRenderer renderer = new MasterRenderer();
while (!Display.isCloseRequested()) {
DisplayManager.updateDisplay();
//Here is the solution if(org.lwjgl.input.Mouse.isButtonDown(org.lwjgl.input.Mouse.getEventButton())){
System.out.println("Mouse was clicked");
}
}
renderer.cleanUp();
DisplayManager.closeDisplay();
}
当画布未设置为父级(画布上没有任何内容)时,mouseListener 起作用。但是当显示父级设置为画布时。它什么也不做。当画布设置为父级时,如何确定鼠标何时在画布上单击?
【问题讨论】:
-
1) 请改用
MouseAdapter。 2) 类名应以大写字母开头。 -
Display是什么?你在哪里添加鼠标监听器? -
@user1803551 legacy.lwjgl.org/javadoc/org/lwjgl/opengl/Display.html 这就是显示。
-
好吧,你将不得不发布一个MCVE。
-
评论里的链接里有说明。
标签: java lwjgl mouselistener