当前位置: 首页 > 知识库问答 >
问题:

JOGL,com.jogamp.newt.event.KeyListener问题

唐兴贤
2023-03-14

因此,我们有一个如下的应用程序结构:

在EC_GUI构造函数中,我初始化了glViewer

    private void initGlViewer() {
        /**
         * Viewer.
         */
        glViewer = new GLViewer();
        glViewer.setup();
        centerPanel.add(glViewer.getNewtCanvasAWT());
    }

glViewer实现GLEventListener,如下所示

    public GLViewer() {

        GLProfile gLProfile = GLProfile.getDefault();

        GLCapabilities gLCapabilities = new GLCapabilities(gLProfile);

        glWindow = GLWindow.create(gLCapabilities);
        /*
         *  We combine NEWT GLWindow inside existing AWT application (the main JFrame) 
         *  by encapsulating the glWindow inside a NewtCanvasAWT canvas.
         */
        newtCanvasAWT = new NewtCanvasAWT(glWindow);
    }
@Override
    public synchronized void keyPressed(KeyEvent ke) {
        System.out.println("keyPressed " + ke.getKeyCode());

嗯,有时我会遇到关于触发的不一致。让我们举一个例子,当我按下组合Ctrl+O打开FileChooser时。

这是应该的:

keyPressed 17
List of pressed inputs
ctrl
keyPressed 79
List of pressed inputs
ctrl
o
keyReleased 17
keyReleased 79
2014.10.09, 10:53:49  [INFORMATION]  Open a project ...
2014.10.09, 10:53:49  [INFORMATION]  Opening file chooser for load.
2014.10.09, 10:53:55  [INFORMATION]  User clicked 'cancel' in file chooser dialog.

在这里,您可以看到我按下ctrl(17),然后o(17),它们都被释放,并显示fileChooser。然后我退出,你们可以在最后一行中看到。

keyPressed 17
List of pressed inputs
ctrl
keyPressed 79
List of pressed inputs
ctrl
o
keyReleased 17
2014.10.09, 10:57:34  [INFORMATION]  Open a project ...
2014.10.09, 10:57:34  [INFORMATION]  Opening file chooser for load.
2014.10.09, 10:57:35  [INFORMATION]  User clicked 'cancel' in file chooser dialog.
keyPressed 17
List of pressed inputs
ctrl
keyReleased 79
2014.10.09, 10:57:36  [INFORMATION]  Open a project ...
2014.10.09, 10:57:36  [INFORMATION]  Opening file chooser for load.
2014.10.09, 10:57:38  [INFORMATION]  User clicked 'cancel' in file chooser dialog.
keyPressed 17
List of pressed inputs
ctrl
keyPressed 79
List of pressed inputs
ctrl
o
keyReleased 17
2014.10.09, 11:08:57  [INFORMATION]  Open a project ...
2014.10.09, 11:08:57  [INFORMATION]  Opening file chooser for load.
2014.10.09, 11:08:58  [INFORMATION]  User clicked 'cancel' in file chooser dialog.
keyPressed 17
List of pressed inputs
ctrl
keyReleased 79
2014.10.09, 11:08:59  [INFORMATION]  Open a project ...
2014.10.09, 11:08:59  [INFORMATION]  Opening file chooser for load.
2014.10.09, 11:09:02  [INFORMATION]  User clicked 'cancel' in file chooser dialog.
keyReleased 79
keyReleased 17
keyReleased 79

共有1个答案

卫嘉泽
2023-03-14

我通过在每个KeyPressed/KeyReleased事件中检查按下的修饰符,并通过keyEvent.isxDown()查询每个X修饰符来解决这个问题

 类似资料:
  • JOGL 是Java对于OpenGl的绑定(Java Bindings for OpenGL). 示例代码: import net.java.games.jogl.*;public class HelloWorld {   public static void main (String args[]) {       try {         System.loadLibrary("jogl")

  • 主要内容:JOGL 内置Primitive参数, JOGLDisplay() 方法, JOGL Primitive绘制线 示例, 作为一个开放的图形库,我们可以在 JOGL 中绘制不同的形状,如圆形、三角形、正方形。因此,为了绘制这些形状,Open GL 提供了有助于 JOGL 绘制 2D 和 3D 尺寸图形的基元。 OpenGL Primitive 提供了各种内置参数,根据这些参数可以绘制不同的形状。每个参数在绘制图形中都有一些特定的作用。 JOGL 内置Primitive参数 以下是 JOG

  • 主要内容:JOGL GLCanvas 类,JOGL GLJPanel 类,JOGL GLCapibilities类 在本节中,我们将了解 JOGL 提供的类。通过这些类,我们可以在Java代码中添加OpenGL的功能。 以下是 JOGL 提供的重要类: GLCanvas 和 GLJPanel 类是实现 GLAutoDrawable 接口并用作 Open GL 命令的绘图表面的 GUI 类。 GLCanvas 类 GLJPanel 类 GLProfile 类 GLCapabilities 类 JO

  • 主要内容:JOGL GLEventListener 接口,JOGL GLEventListener 方法,JOGL GLAutoDrawable 接口,JOGL GLAutoDrawable 方法要创建一个JOGL程序,需要了解以下接口: GLEventListener 接口 GLAutodrawable 接口 JOGL GLEventListener 接口 GLEventListener 接口存在于javax.media.opengl包中。它提供了一种基于事件的机制来执行 OpenGL 渲染。

  • 在本节中,我们将了解如何在我们的操作系统中安装 JOGL。因此,要下载和安装 JOGL,请按照以下步骤操作: 在安装JOGL之前,需要在我们的系统中安装Java。因此,如果我们的系统中未安装 Java,请按照以下链接进行安装。如何在 Java 中设置路径   安装 Java 后,请按照以下链接下载 JOGL。下载包含在黑色矩形中的 zip 文件并将其解压缩。下载JOGL 下载 gluegen的 z

  • 主要内容:什么是开放图形库 (OpenGL)?,JOGL的历史,Java本机接口JOGL(Java 开放图形库)是一个包装库,它允许将 OpenGL 与 Java 编程语言一起使用。因此,程序员可以在 JOGL 的帮助下轻松地将计算机图形嵌入 Java 代码中。 JOGL 是一个开源库,可以访问 OpenGL 的完整 API。因此,它继承了 OpenGL 的所有特性。JOGL 能够在任何类型的操作系统上执行,例如 Window、Linux 和 Mac,没有任何缺陷。 什么是开