Swing Focus im JFrame

Status
Nicht offen für weitere Antworten.

Nitram

Mitglied
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

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
 

Ebenius

Top Contributor
Ist es unbedingt notwendig, eine AWT-Komponente (Canvas) zu benutzen, oder könntest Du auch ein JComponent benutzen? Falls ja, probier doch mal einen [c]InputVerifier[/c] dranzuhängen, der [c]false[/c] zurückliefert.

Ansonsten kannst Du vielleicht auch eigene KeyBindings an die [c]JRootPane[/c] des Fensters hängen, die F10 und ALT "wegfuttern". :)

Ebenius
 

Nitram

Mitglied
Ich benötige unbedingt ein [c]java.awt.Canvas[/c]. Da führt kein Weg drum herum.

Das mit dem Keybindings auf der [c]JRootPane[/c] habe ich versucht, genauso wie auf der ContentPane, der GlassPane, der MenuBar und dem Canvas selbst. Alles ohne Erfolg.

Nitram
 

Ebenius

Top Contributor
Wozu muss denn der Fokus unbedingt auf dem Canvas bleiben? Vielleicht lässt sich an der Stelle ja was machen...

Ebenius
 

Nitram

Mitglied
Der Focus muss auf den Canvas sein, weil die Render Library (LWJGL) das Keyboard und Maus binding über diesen Canvas macht. Sobald der Focus weg ist, bekommen die Input Handler von LWJGL nichts mehr mit. Dazu kommt das LWJGL das Bild auf dem Canvas nicht aktuallisieren kann wenn der Focus so verloren geht und damit den main loop einfriert.

Nitram
 

Ebenius

Top Contributor
Da ich hier kein Windows habe und das Problem mit meinem Linux nicht einfach nachvollziehen kann: Kannst Du nochmal den Test machen, ein Menü einzubauen, das, sobald es den Fokus erhält, den aktuellen StackTrace herausschmeißt? Den StackTrace würde ich mir gern ansehen. Vielleicht findet man ja raus, wie man den Fokuswechsel verhindern kann, wenn man weiß, wo er genau herkommt.

Ebenius
 

Nitram

Mitglied
Die Idee hatte ich auch schon. Leider hat sich da gezeigt das ein FocusListener auf der MenuBar und auf dem Canvas nicht gemeldet haben das der Focus gewechselt hat.

Der FocusListener lag direkt auf der JMenuBar. War das richtig?

Nitram
 

Ebenius

Top Contributor
Der FocusListener lag direkt auf der JMenuBar. War das richtig?
Hab ich nie getestet, würde aber annehmen, dass der FocusListener auf dem [c]JMenu[/c] liegen muss. Der [c]JMenuBar[/c] hat ja keinerlei Aktionen mit Maus/Tastatur, deswegen bekommt er bestimmt nie den Fokus.

Keine Ahnung, ob der Ansatz was bringt. Wenn es sich um mein Programm handelte, würde ich's mir genauso im Debugger ansehen; [c]FocusListener[/c] drauf und Breakpoint setzen. Und dann lange gucken.

Du kannst den [c]FocusListener[/c] auch auf den Canvas setzen und die [c]focusLost(...)[/c]-Methode beleuchten. Das sollte den selben Effekt bringen.

Ebenius
 

Nitram

Mitglied
Ich habe jetzt einen FocusListener geschrieben und den auf alle Elemente gelegt die ich so finden konnte. Leider brachte das genau gar nichts. Keine Focus Lost meldung obwohl ich den Listener auf alle Elemente der MenuBar, auf das Canvas und auf alle Panes von dem JFrame und auf das JFrame selbst gelegt habe. Der FocusListener bekommt das einfach nicht mit...

Nitram
 

Ebenius

Top Contributor
Okay. Dann probier mal:
Java:
KeyboardFocusManager.getCurrentKeyboardFocusManager().addPropertyChangeListener(new PropertyChangeListener() {
  public void propertyChanged(PropertyChangeEvent e) {
    // do the evil stuff here
  }
});
Ebenius
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
SebSnake JFrame "Focus" erzwingen (wie JOptionPane) AWT, Swing, JavaFX & SWT 3
J Focus auf JFrame AWT, Swing, JavaFX & SWT 3
P Focus auf JFrame AWT, Swing, JavaFX & SWT 5
E Focus auf titledborder AWT, Swing, JavaFX & SWT 8
B JavaFX TextInputDialog: Focus auf Eingabefeldinhalt setzen und nach OK Inhalt leeren AWT, Swing, JavaFX & SWT 5
A JPanel austauschen und Focus geben AWT, Swing, JavaFX & SWT 3
xYurisha Gui Focus von JTextField weglenken AWT, Swing, JavaFX & SWT 6
O Focus zwischen Chat und Spiel wechselns AWT, Swing, JavaFX & SWT 3
T bekomme keinen Focus auf JTextField AWT, Swing, JavaFX & SWT 3
fLooojava JButton [Focus) AWT, Swing, JavaFX & SWT 4
K JavaFX Focus Listener für gesamte Scene AWT, Swing, JavaFX & SWT 1
C JOptionPane.showConfirmDialog() -> Focus auf NEIN -> Enter gibt YES_OPTION zurück AWT, Swing, JavaFX & SWT 6
T SWT Button soll nur sichbar sein,wenn im Textfeld der Focus ist AWT, Swing, JavaFX & SWT 4
B Swing JTextfeld bekommt nur jedes Zweite mal Focus AWT, Swing, JavaFX & SWT 11
E JTextPane Focus AWT, Swing, JavaFX & SWT 1
D ComboBoxCellEditor Refresh beim Focus AWT, Swing, JavaFX & SWT 4
A Swing Focus der Radio Buttons + text bleibt gleich und gleichzeitige ausgabe zweier Objekte in 1. Fenster AWT, Swing, JavaFX & SWT 3
A Focus Problem AWT, Swing, JavaFX & SWT 4
I focus an ein jdialog geben AWT, Swing, JavaFX & SWT 3
B JInternalFrame Focus setzten geht nicht AWT, Swing, JavaFX & SWT 2
A Swing Focus auf gemalte Component AWT, Swing, JavaFX & SWT 5
H Swing JTextField in JWindow, JWindow bekommt focus zurück? AWT, Swing, JavaFX & SWT 9
M Swing Focus für Buttons deaktiviert --> keine Reaktion mehr auf Tastendrücke AWT, Swing, JavaFX & SWT 5
M focus subFrame AWT, Swing, JavaFX & SWT 3
G Force Focus für JButton AWT, Swing, JavaFX & SWT 2
lumo SWT Composite Focus AWT, Swing, JavaFX & SWT 2
T disabled Checkbox soll trotzdem Focus bekommen AWT, Swing, JavaFX & SWT 9
C Swing Focus Management AWT, Swing, JavaFX & SWT 3
lumo SWT Table Selection Color +Focus Out AWT, Swing, JavaFX & SWT 14
H Swing Focus bekommen AWT, Swing, JavaFX & SWT 4
D Swing keine Tabellen Zeilen ohne Focus AWT, Swing, JavaFX & SWT 7
Screen Focus Problem , KeyListener, TextField , Key AWT, Swing, JavaFX & SWT 4
L AWT Focus auf Fenster setzen AWT, Swing, JavaFX & SWT 4
H warum kann ich das focus event nicht abfangen ? AWT, Swing, JavaFX & SWT 5
L Swing Input Focus eines JTextFields in einer JList AWT, Swing, JavaFX & SWT 2
A Focus in JTable Cell AWT, Swing, JavaFX & SWT 3
A Focus für JApplet AWT, Swing, JavaFX & SWT 7
R Focus ermitteln AWT, Swing, JavaFX & SWT 2
C JTable Focus Handling AWT, Swing, JavaFX & SWT 2
I Swing Focus Listener bei PComboBox von pswing Erweiterung AWT, Swing, JavaFX & SWT 7
V Swing Problem mit Focus setzen AWT, Swing, JavaFX & SWT 7
thE_29 Swing JTabbedPane Focus von Komponenten außerhalb AWT, Swing, JavaFX & SWT 10
B JTable getselectedrow liefert -1 wenn Focus verloren AWT, Swing, JavaFX & SWT 4
S Versuch den Focus zu klauen detektieren? AWT, Swing, JavaFX & SWT 14
V JTabbedPane - keine "Focus"-Box auf selektiertem T AWT, Swing, JavaFX & SWT 2
L Focus für KeyListener auf verschiedene Panels AWT, Swing, JavaFX & SWT 2
O Focus im GBL steuern. AWT, Swing, JavaFX & SWT 3
K Focus an das JPanel übergeben AWT, Swing, JavaFX & SWT 2
K Focus-Problem AWT, Swing, JavaFX & SWT 9
O TextBoxen Focus über Pfeiltasten steuern AWT, Swing, JavaFX & SWT 3
G Problene mt Focus unter Swing AWT, Swing, JavaFX & SWT 7
G JTable und Focus AWT, Swing, JavaFX & SWT 30
D Beim Starten ein JTextfield Focus geben AWT, Swing, JavaFX & SWT 7
J JTextPane bekommt keinen Focus! AWT, Swing, JavaFX & SWT 3
P TextFeld Focus entfernen AWT, Swing, JavaFX & SWT 2
F Problem mit Actions, TextComponents und Focus AWT, Swing, JavaFX & SWT 2
K Focus mit Mouseclick auf JPanel setzen AWT, Swing, JavaFX & SWT 4
D Focus auf JPanel setzen AWT, Swing, JavaFX & SWT 2
B JTable - Focus - TabTaste AWT, Swing, JavaFX & SWT 2
D Focus in bestimmter Celle in JTable AWT, Swing, JavaFX & SWT 3
B Komponente in JTable bekommt keinen Focus AWT, Swing, JavaFX & SWT 3
M Focus beim öffnen eines neuen JFrames AWT, Swing, JavaFX & SWT 6
O JTextField- Selection / Focus bei nicht editierbaren Feldern AWT, Swing, JavaFX & SWT 2
B Focus für Textfeld AWT, Swing, JavaFX & SWT 5
B im JTree Focus setzen und navigieren AWT, Swing, JavaFX & SWT 3
B JInternalFrame in den Vordergrund rücken + Focus AWT, Swing, JavaFX & SWT 15
D JTable: Focus auf Zelle markiert ihren Text zum editieren AWT, Swing, JavaFX & SWT 2
C Komponente mit Focus bevor JButton-Klick merken. AWT, Swing, JavaFX & SWT 6
L Focus setzen AWT, Swing, JavaFX & SWT 3
G JTabbedPane, Focus, ChangeListener AWT, Swing, JavaFX & SWT 1
B Focus in JOptionPane AWT, Swing, JavaFX & SWT 2
J Focus-Problem bei Vollbildmodus AWT, Swing, JavaFX & SWT 7
A Combobox Focus-Events, Tab in Tabelle AWT, Swing, JavaFX & SWT 7
F Fenster in den Vordergrund aber nicht im Focus AWT, Swing, JavaFX & SWT 21
O Abfrage ob eine bstimmte Komponente den Focus hat AWT, Swing, JavaFX & SWT 4
T JTable Focus auf Zelle setzen AWT, Swing, JavaFX & SWT 3
R Focus durch "tabben" von JTable Zelle auf andere K AWT, Swing, JavaFX & SWT 8
R Focus speeren AWT, Swing, JavaFX & SWT 2
K JList - merkwürdiges Verhalten bei Leertaste (unter Focus) AWT, Swing, JavaFX & SWT 7
W Components Focus mit TAB-Taste VERTIKAL bewegen AWT, Swing, JavaFX & SWT 4
V JTextField Focus Cursor setzen AWT, Swing, JavaFX & SWT 2
D jcolorchooser - lost focus AWT, Swing, JavaFX & SWT 2
R Focus auf bereits geöffnetes Fenster setzen AWT, Swing, JavaFX & SWT 9
O Welche Möglichkeit zum Focus setzen! AWT, Swing, JavaFX & SWT 2
R JMenu copy Focus-Problem AWT, Swing, JavaFX & SWT 2
M Focus einstellen AWT, Swing, JavaFX & SWT 3
G Focus so setzen, daß in einer jTextArea der Cursor blinkt AWT, Swing, JavaFX & SWT 7
G JTable: Rahmen bei Focus um Zelle AWT, Swing, JavaFX & SWT 2
thE_29 Modaler Dialog - close on not focus AWT, Swing, JavaFX & SWT 3
G JOptionPane verliert Focus AWT, Swing, JavaFX & SWT 3
A JTree Problem mit Focus bzw. Selection AWT, Swing, JavaFX & SWT 5
C Focus setzen AWT, Swing, JavaFX & SWT 2
G JTree Focus setzen AWT, Swing, JavaFX & SWT 2
F HILFE!!! Focus-Probleme bei unterschiedlichen Panel's AWT, Swing, JavaFX & SWT 3
H Mehrere Panels auf JFrame AWT, Swing, JavaFX & SWT 8
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
Paty JFrame anfänger bräuchte hilfestellung AWT, Swing, JavaFX & SWT 7
Apfelbaum2005 Swing JFrame mehrere JPanels mit unterschiedlichen Formen hinzufügen AWT, Swing, JavaFX & SWT 1
N AWT JPanel zu Jframe hinzufügen AWT, Swing, JavaFX & SWT 2
Mausposition relativ zu JFrame bekommen AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben