したがって、次のようなアプリケーション構造があります。
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 に追加します。
com.jogamp.newt.event のキーとマウスのイベントを使用しています。
私のkeyListenerの私のkeyPressedイベントは次のように始まります:
@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.
ctrl と o keyPressed を取得しますが、keyReleased の 1 つ、この場合は o を見逃しています。とにかく、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、o-keyPressed、ctrl-keyReleased、o-keyReleased なし、fileChooser が開いてから閉じます。それらをもう一度押すと、ctrl-keyPressed、o-keyPressed、o-keyReleased、ctrl-keyReleased が表示されず、fileChooser が開き、再度閉じます。もう一度 ctrl+o を押しますが、keyPressed は何も取得しません。o-keyReleased、ctrl-keyReleased、そして別の o-keyReleased を取得するだけです。今回は FileChooser が開きません。
どんな手掛かり?