2014-10-09 4 views
0

Таким образом, мы имеем структуру приложения следующим образом:JOGL, проблемы com.jogamp.newt.event.KeyListener

enter image description here

в конструкторе 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); 
    } 

в glViewer.setup() Я добавляю слушателей мыши, ключа и glEvent в glWindow.

Я использую событие key и mouse из com.jogamp.newt.event.

Мой Keypressed событие в моей KeyListener начинается как:

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

и keyReleased, а также.

Ну, иногда я испытываю несоответствия в отношении запуска. Возьмем в качестве примера, когда я нажимаю сочетание 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), то о (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. 

Я получаю Ctrl и о Keypressed, но я скучаю один из keyReleased, в о в этом случае. В любом случае fileChooser все равно открывается. В следующей попытке я снова нажимаю ctrl + o, но на этот раз я пропустил o keyPressed. Я также пропустил ctrl keyReleased. В любом случае fileChooser все еще открыт. Но иногда оно не открыто, например:

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 

я Ctrl-Keypressed, о-Keypressed, Ctrl-keyReleased, ни о-keyReleased, fileChooser открывается, то я его закрыть. Я нажал их снова, я получаю ctrl-keyPressed, no o-keyPressed, o-keyReleased, no ctrl-keyReleased, fileChooser открывается, затем я снова закрываю его. Я нажимаю ctrl + o снова, я не получаю никакой keyPressed, я просто получаю o-keyReleased, ctrl-keyReleased, а затем еще один o-keyReleased. FileChooser не открывается в этот раз.

Любая подсказка?

+0

Вопроса уже задавал здесь: http://forum.jogamp.org/keyReleased-keyPressed- problem-td4033288.html Просьба предоставить единичный тест и заполнить отчет об ошибке. – gouessej

+0

@gouessej уже сделано – elect

+0

https://jogamp.org/bugzilla/show_bug.cgi?id=1092 – gouessej

ответ

0

Я решил, проверяя на каждом Keypressed/keyReleased случае спрессованные модификаторы по quering каждого модификатора X по KeyEvent.isXDown()