Hallo,
ich kämpfe seit einigen Tagen gegen ein Problem dessen Lösung mit bisher versagt blieb.
Die Situation ist folgende. Ich programmiere den Client für ein kleines Spiel. Die Darstellung des Spiels wird über OpenGL umgesetzt und auf ein java.awt.Canvas gemalt. Damit das Spiel richtig arbeitet darf dieser java.awt.Canvas niemals den Focus verlieren. Der java.awt.Canvas ist eingebunden in die RootPane eines javax.swing.JFrame. Das funktioniert auch alles soweit. Außer unter Windows. Dort hat die ALT und die F10 Taste auf der Tastatur die funktion das die MenuBar ausgewählt wird. Und obwohl mein JFrame keine MenuBar hat verliert das Canvas den Focus sobald eine der beiden Tasten losgelassen wird.
Das Canvas ist völlig unverändert und wird so wie es mit den Constructor erstellt wird in das JFrame gesetzt mit
displayFrame ist das JFrame und displayParent ist das Canvas.
Das JFrame hat ansich auch keine besonderen Modifikationen. Ein Titel, eine feste Größe, nicht resizable. Außerdem hat es einen WindowListener der überwacht wann das Fenster geschlossen werden soll und eine Warnmeldung anzeigt.
Das ist die Situation in der das Problem auftritt. Ich habe verschiedene Lösungsansätze versucht von denen aber jeder daneben gegangen ist.
Gibt es irgendwelche Ideen wie man sowas lösen könnte?
Nitram
ich kämpfe seit einigen Tagen gegen ein Problem dessen Lösung mit bisher versagt blieb.
Die Situation ist folgende. Ich programmiere den Client für ein kleines Spiel. Die Darstellung des Spiels wird über OpenGL umgesetzt und auf ein java.awt.Canvas gemalt. Damit das Spiel richtig arbeitet darf dieser java.awt.Canvas niemals den Focus verlieren. Der java.awt.Canvas ist eingebunden in die RootPane eines javax.swing.JFrame. Das funktioniert auch alles soweit. Außer unter Windows. Dort hat die ALT und die F10 Taste auf der Tastatur die funktion das die MenuBar ausgewählt wird. Und obwohl mein JFrame keine MenuBar hat verliert das Canvas den Focus sobald eine der beiden Tasten losgelassen wird.
Das Canvas ist völlig unverändert und wird so wie es mit den Constructor erstellt wird in das JFrame gesetzt mit
Java:
displayFrame.getContentPane().add(displayParent);
displayFrame ist das JFrame und displayParent ist das Canvas.
Das JFrame hat ansich auch keine besonderen Modifikationen. Ein Titel, eine feste Größe, nicht resizable. Außerdem hat es einen WindowListener der überwacht wann das Fenster geschlossen werden soll und eine Warnmeldung anzeigt.
Das ist die Situation in der das Problem auftritt. Ich habe verschiedene Lösungsansätze versucht von denen aber jeder daneben gegangen ist.
- .setFocus*
Ich habe die setFocus Funktionen des JFrames und des Canvas so versucht einzustellen das das JFrame niemals den Focus hat und das Canvas immer. Leider hatte das überhaupt keinen Effekt. - Canvas.setFocusListener
Ich habe den Focus auf dem Canvas mit einem Focus Listener überwacht. Leider nur um festzustellen das der verlorene Focus nicht an den Focus Listener gemeldet wird. - JDialog statt JFrame
Ich habe das gesamte Fenster auf ein javax.swing.JDialog umgestellt. Leider mit exakt den selben Problemen. - JMenuBar
Ich habe selbst eine JMenuBar eingebaut. Diese wird auch selektiert wenn ALT oder F10 losgelassen wird. Aber das sie sich versteckt und den Focus sofort zurück gibt, das habe ich nicht geschafft.
Gibt es irgendwelche Ideen wie man sowas lösen könnte?
Nitram