Java comment faire JFrames maximisée, mais pas redimensionnable
À l'origine (Voir ma précédente question "Java comment faire JFrames abord comme une fenêtre maximisée") je voulais faire une fenêtre qui commence maximisée.
Ce code effectue cette opération:
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);
}
Toutefois, si cette fenêtre est restaurée vers le bas, il devient pratiquement inexistante bar. Pour résoudre cela, je définir une taille de la fenêtre à l'aide setSize(). Cela fonctionne, mais présente un autre problème, la fenêtre peut encore être redimensionnée.
Pour résoudre ce problème, j'ai mis setResizable(false); et ceci est mon code pour l'instant:
public static void main(String[] args) {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
JFrame frame = new JFrame("Jedia");
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setSize(screenSize);
frame.setResizable(false);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
Cependant, maintenant, la fenêtre commence au niveau de sa taille spécifiée (plutôt que de maximiser) et ne peuvent pas être restaurées.
Donc, ma question est, comment puis-je effectuer la fenêtre de commencer maximisé, lui donner une taille lorsqu'il est restauré vers le bas et faire le redimensionnement-elle impossible? Ou faire une fenêtre qui commence optimisées et ne peut pas être restaurée vers le bas?
OriginalL'auteur Jack O'Connor | 2013-02-14
Vous devez vous connecter pour publier un commentaire.
Il y a une solution simple qui fonctionne presque tout le temps: faire de votre image et non pas redimensionnable après avoir mis le visible. Si seulement modifie le code de cette façon:
De cette façon, l'image va commencer agrandie et la maximiser le bouton sera grisé, de prévenir l'utilisateur de l'utiliser. (Je ne sais pas vraiment pourquoi vous avez à faire cela. Je suppose que l'état agrandi est vraiment appliqué que lorsque la fenêtre est visible, et si vous le faites unresizable avant, il ne s'applique pas.)
Il fonctionne presque tout le temps parce que sur Windows 7 au moins vous pouvez faire la fenêtre sort de l'état agrandi en cliquant sur la barre de titre et en la faisant glisser. Mais il sera à la taille que vous avez défini précédemment. Le problème, c'est que votre utilisateur ne sera pas en mesure de maximiser encore, et je n'ai pas trouvé le moyen avec les auditeurs pour rendre la fenêtre de retour à l'état agrandi. ( Modifier: @David Kroukamp montre dans la dernière partie de sa réponse qu'il est possible de forcer l'état agrandi à l'aide d'un ComponentListener. Par conséquent, vous n'avez pas à utiliser
setResizable(false)
de Cette façon, vous avez toujours un problème avec Windows 7, car le glissement de l'action n'est pas piégé par cet événement pour quelque raison que ce soit, mais les utilisateurs seront en mesure d'utiliser le maximisée bouton pour le mettre là où il devrait être.)Maintenant, il n'est presque jamais une raison pour faire ce genre de choses. Les utilisateurs n'aime pas vraiment quand vous empêcher de manipuler leurs fenêtres (fenêtres maximisées ne peut pas être déplacé, par exemple, et qui peut être gênant lorsque vous disposez de plusieurs écrans). Une exception est si vous faites un jeu, qui est généralement en plein écran. Mais alors vous ne voulez pas d'une JFrame parce que vous ne voulez pas que tout le décor, mais une Fenêtre.
Si votre problème est que par défaut, la taille de la fenêtre est très petite, c'est normal. Vous devez mettre quelque chose dans votre première image (certaines commandes, les boutons, ce que vous voulez dans votre application), à l'aide de mises en page (c'est important) puis d'appeler la méthode
pack()
sur votre cadre. Il a choisi une belle taille par défaut de votre fenêtre.Enfin, un dernier mot. J'ai mis mon exemple de code dans une
main
méthode comme un raccourci, mais vous devriez toujours faire Balancer des trucs dans le Swing EDT en utilisantSwingUtils.invokeLater()
.OriginalL'auteur Cyrille Ka
Parfois, vous devez être prudent sur l'ordre vous définissez JFrame paramètres.
Aussi, vous devriez être en utilisant des composants Swing sur l'event dispatch thread.
Essayer cela et voir si ça aide.
OriginalL'auteur Gilbert Le Blanc
Quel milieu êtes-vous sur? J'ai essayé cela avec JDK1.6 /JDK1.7 sous Win7 et il fonctionne comme prévu (fenêtre commence agrandie, se réduit dans la barre des tâches).
OriginalL'auteur pmorken
J'ai une sorte de hack pour vous, qui pourrait travailler.
Essayez ce code (il a travaillé pour moi):
e.paramString()
renvoie une Chaîne qui ressemble à "COMPONENT_RESIZED (-8,-8, [screensize])" quand une action de restauration.OriginalL'auteur Elist