Comment focaliser un JFrame?
-
22-07-2019 - |
Question
J'écris un petit jeu, avec un JFrame contenant le jeu principal et un autre JFrame affichant le score. le problème est que, quand j'ai fini de les construire, le score JFrame finit toujours par être concentré! J'ai essayé d'appeler scoreDisplay.toFront (), scoreDisplay.requestFocus () et même:
display.setState(JFrame.ICONIZED);
display.setState(JFrame.NORMAL);
Y at-il un moyen de faire ce travail? Merci d'avance, John Murano
La solution
Avez-vous envisagé de placer le score dans le même cadre que le cadre du jeu?
Une autre option possible (rapide et sale) consiste à les créer dans l'ordre inverse ou au moins (si le score dépend du jeu) de les afficher dans l'ordre inverse.
score.setVisible( true );
game.setVisible( true );
À mon avis, ils sont actuellement:
game.setVisible( true );
score.setVisible( true );
Autres conseils
Basculer alwaysOnTop
Voir ici:
http://forums.sun.com/thread.jspa?threadID=5124278
Lisez à propos de toFront dans l'API http://java.sun.com /j2se/1.5.0/docs/api/java/awt/Window.html#toFront
Certaines plates-formes n'autorisent peut-être pas cette machine virtuelle placer ses fenêtres au-dessus des fenêtres de applications natives, ou Windows de autres ordinateurs virtuels.
Sous Windows, par exemple toFront l’icône de la barre des tâches scintiller, mais la fenêtre reste dans le retour.
La seule pensée qui va forcer le la fenêtre à l'avant est setAlwaysOnTop.
frame.setAlwaysOnTop(true);
frame.setAlwaysOnTop(false);
Appelez la méthode requestFocus ()
.
Cela n’est pas garanti, car il existe de nombreuses raisons pour lesquelles un système d’exploitation ne permet pas à une image de se focaliser. Il pourrait y avoir une autre image avec une priorité plus élevée dans une application différente. Il existe également des bureaux Linux qui (si je me souviens bien) ne permettent pas aux cadres de demander le focus.
Pour vous donner une meilleure chance de succès, je vous recommande également d'appeler la méthode toFront ()
avant de demander le focus.
frame.setVisible(true);
frame.toFront();
frame.requestFocus();
N'oubliez pas que rien de tout cela n'est garanti car la gestion des images, en particulier avec la mise au point et la superposition, dépend fortement du système d'exploitation. Réglez donc le cadre sur visible, déplacez-le vers l'avant et demandez la mise au point. Une fois que vous avez abandonné l’EDT, le système d’exploitation donnera probablement le focus au cadre. À tout le moins, la fenêtre devrait être au-dessus.
Voici comment je le ferais:
frame.toFront();
frame.setState(Frame.NORMAL);
et si vous souhaitez également avoir plus de contrôle, vous devez utiliser requestFocuse.
BTW, voici un exemple: http: //coding.derkeiler. com / Archives / Java / comp.lang.java.gui / 2006-06 / msg00152.html
Ajoutez simplement la ligne de code suivante au-dessus du code JOptionPaneMessageDialog ... this.setAlwaysOnTop (false);
frame.setExtendedState( JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);
Essayez ce qui précède ..