JOGL, com.jogamp.newt.event.KeyListener problems

JOGL, com.jogamp.newt.event.KeyListener problems

Problem Description:

So, we have an application structure as following:

enter image description here

in the EC_GUI constructor I initialize the glViewer

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

The glViewer implements the GLEventListener and is the following

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

in the glViewer.setup() I add mouse, key and glEvent listeners to the glWindow.

I am using the key and mouse event from the com.jogamp.newt.event.

My keyPressed event in my keyListener starts as:

@Override
    public synchronized void keyPressed(KeyEvent ke) {
        System.out.println("keyPressed " + ke.getKeyCode());

and the keyReleased as well.

Well sometimes I am experiencing inconsistencies regarding the triggering. Let’s take as an example when I press the combination ctrl+o to open the fileChooser.

This is as it should be:

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.

Here you can see I press ctrl (17), then o (17), they are both released and the fileChooser gets displayed. And then I exit, as you can see it in the last line.

But sometimes this is what I get:

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.

I get the ctrl and o keyPressed, but I miss one of the keyReleased, the o in this case. Anyway the fileChooser still gets opened. In the next attempt I press again ctrl+o but this time I miss the o keyPressed. I also miss the ctrl keyReleased. Anyway the fileChooser gets still opened.
But sometimes it doesnt open, for example:

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

I get ctrl-keyPressed, o-keyPressed, ctrl-keyReleased, no o-keyReleased, fileChooser opens, then I close it.
I pressed them again, I get ctrl-keyPressed, no o-keyPressed, o-keyReleased, no ctrl-keyReleased, fileChooser opens, then I close it again.
I press ctrl+o again, I do not get any keyPressed, I just get an o-keyReleased, a ctrl-keyReleased and then another o-keyReleased. FileChooser does not open this time..

Any clue?

Solution – 1

I solved by checking at every keyPressed/keyReleased event the pressed modifiers by quering each X modifier by KeyEvent.isXDown()

Solution – 2

Alternate solution for this is on keyReleased() also using

if (!ke.isAutoRepeat())
{
 // ... do stuff
}

isAutoRepeat() filters out input events automatically sent multiple times by the OS.

Rate this post
We use cookies in order to give you the best possible experience on our website. By continuing to use this site, you agree to our use of cookies.
Accept
Reject