Wie ein JFrame konzentrieren?
-
22-07-2019 - |
Frage
Ich schreibe ein kleines Spiel, mit einem JFrame, das das Hauptspiel hält, und ein anderes JFrame, die die Partitur zeigt. das Problem ist, wenn ich sie fertig bin Konstruktion, die Partitur JFrame immer endet konzentriert! Ich habe versucht, scoreDisplay.toFront () aufrufen, scoreDisplay.requestFocus () und sogar:
display.setState(JFrame.ICONIZED);
display.setState(JFrame.NORMAL);
Gibt es eine Möglichkeit, diese Arbeit zu machen? Danke im Voraus, john murano
Lösung
Haben Sie die Partitur im selben Rahmen wie das Spiel Rahmen betrachten Einstellung?
Weitere mögliche (quick and dirty) Option ist es, sich in umgekehrter Reihenfolge zu erstellen, oder zumindest (falls Punktzahl auf Spiel hängt), um sie in umgekehrter Reihenfolge angezeigt werden.
score.setVisible( true );
game.setVisible( true );
Meine Vermutung ist, dass zur Zeit sind sie:
game.setVisible( true );
score.setVisible( true );
Andere Tipps
Toggle alwaysOnTop
Sehen Sie hier:
http://forums.sun.com/thread.jspa?threadID=5124278
Lesen Sie mehr über toFront in der API http://java.sun.com /j2se/1.5.0/docs/api/java/awt/Window.html#toFront
Einige Plattformen können diese VM nicht zulassen zu platzieren sein Windows über Fenster native Anwendungen oder Windows von andere VMs.
Unter Windows OS zum Beispiel toFront bewirkt, dass das Symbol in der Taskleiste auf flackern, aber das Fenster bleibt in der zurück.
Die einzige denken, dass die Kraft wird Fenster nach vorne ist setAlwaysOnTop.
frame.setAlwaysOnTop(true);
frame.setAlwaysOnTop(false);
Rufen Sie die requestFocus()
Methode.
Dies ist nicht garantiert, denn es gibt viele Gründe, warum ein Betriebssystem, einem Rahmen nicht erlauben würde Fokus zu haben. Es könnte ein weiterer Rahmen mit höherer Priorität in einer anderen Anwendung sein. Es gibt auch einige Linux-Desktops, die (wenn ich mich richtig erinnere) Rahmen nicht zulassen Fokus beantragen.
Um Ihnen eine bessere Chance auf Erfolg, empfehle ich auch die toFront()
Methode aufrufen, bevor Fokus anfordert.
frame.setVisible(true);
frame.toFront();
frame.requestFocus();
Beachten Sie bitte, nichts davon ist garantiert, da Frame-Handling, vor allem mit Fokus und Schichtung, ist sehr betriebssystemabhängig. So stellen Sie den Rahmen sichtbar, nach vorne bewegen, und fordern Sie den Fokus. Sobald Sie den EDT aufgeben, wird das Betriebssystem wahrscheinlich den Rahmen geben Sie den Fokus. Zumindest sollte das Fenster oben sein.
Die Art und Weise, dass ich tun würde, ist:
frame.toFront();
frame.setState(Frame.NORMAL);
Und wenn Sie wollen auch mehr Kontrolle über sie haben, sollten Sie requestFocuse verwenden.
BTW, hier ein Beispiel: http: //coding.derkeiler. com / Archiv / Java / comp.lang.java.gui / 2006-06 / msg00152.html
Fügen Sie einfach die folgende Codezeile über dem JOptionPaneMessageDialog Code ... this.setAlwaysOnTop (false);
frame.setExtendedState( JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);
Versuchen Sie, die oben ..