Objectif: strong> J'aimerais avoir un cadre visible dans choses que j'ai essayées jusqu'à présent: strong> p> évaluation: em> Le cadre passera à l'état normal (ne restera pas maximisé) = > pas bon. p> évaluation: em> la fenêtre (ou juste sa Le cadre) apparaîtra avec une taille de 500x500, et après cela, un redimensionnement visuel (au maximum) sera visible => pas bon.
La raison en est que si un cadre n'est pas visible, appeler 3) strong> < / p> évaluation: em> comme dans la tentative n ° 2, le cadre aura un redimension visuel => non bon. p> < fort> 4) strong>
J'ai essayé d'ajouter un auditeur de composant à la trame de remplacement évaluation: em> tous ont abouti à une résolution visuelle comme en tentative # 2 = > Pas bien. P> Alors, que puis-je faire si je veux que mon cadre ait une taille normale prédéfinie, mais je veux que cela semble optimisé? p> Modifier: édité toute la question à être plus clair et ajouté des codes d'exemple (CSCCE). P> p> image.MAXIMized_Both code> état, mais je veux aussi qu'il ait une taille normale prédéfinie afin que L'utilisateur l'aide-t-on, le cadre redimensionnera à la taille que je veux que ce soit. Et je veux que le cadre apparaisse d'abord optimisé, SetextenseTate () code> sera différé jusqu'à ce que le cadre soit visible. P> composition () code> et de modifier l'état là-bas. J'ai également essayé d'ajouter un auditeur d'état de fenêtre remplacer windowstatechange () code>. J'ai aussi essayé d'ajouter un auditeur de fenêtre remplacer fenêtres () code>. P>
5 Réponses :
Pour moi, l'ordre suivant fonctionne
setSize(100,100); setExtendedState(JFrame.MAXIMIZED_BOTH); setVisible(true);
Il a dit qu'il a un visible b> jframe. le vôtre n'est pas.
J'ai écrit dans la question que j'ai essayé cela et que cela faisait de cette façon la fenêtre (ou peut-être que son cadre) apparaîtra dans la taille que vous définissez (100x100 dans votre exemple), puis il sera maximisé. Ceci est un redimensionnement visuel que je veux éviter.
Je ne suis pas sûr de ce que vous voulez dire, alors j'ai fait un exemple pour démontrer ce que je pense que vous voulez.
crée fondamentalement un jframe code> avec SetextenseState (jframe.maximized_both) code. > et après 5000milisecondes, il change d'état sur jframe.normal code> sans scintillement. p>
Je veux que le cadre reste dans l'état Maximized_both. Je modifie la question de sorte que les choses seront plus claires.
"Je veux que le cadre reste dans l'état Maximized_both." I> Je suppose que vous voulez supprimer le minuteur code> utilisé pour démontrer la taille normale du cadre? Laissez cette partie.
Si je quitte cette partie, votre solution proposée est déjà répertoriée dans mes tentatives. Il a un problème que je vais voir un redimensionnement visuel que je veux éviter.
@icza après avoir lu vos commentaires, etc. Je pense que je comprends bien. Un gros problème mais dans votre exemple de code est définitivement non recommandé. Je ne suis pas par mon PC mais aussi loin que je l'obtiens, vous voulez définir le JFRAME maximisé sur la création sans scintillement visuel? Comme Andrewthompson, dit simplement enlever la minuterie. Si cela donne toujours un redimensionnement visuel que moi, il pense qu'il est possible de s'arrêter. Mais je vais confirmer quand, près de mon PC
Oui, je veux que le jframe a été maximisé sur la création, mais je souhaite aussi que la fenêtre ait redimensionné à une taille spécifiée lorsque l'utilisateur l'aide manuellement manuellement. Si je laissais sortir le setsize (), cela ne se produit pas.
Parce que la définition n'est pas persistante. Vous devez remplacer GetPreFerredSize () ou GetMinimalSize (). De plus, je ne recommanderais pas de définir des problèmes mentionnés ci-dessus que vous devriez appeler Pack () sur JFRAME NON SETSIZE.
@icza im devant mon PC. J'ai supprimé nouvelle minuterie (...); code> et tous les travaux parfaits lorsque JFRAME est créé, il est maximisé et je ne vois aucun redimensionnement visible. S'il vous plaît poster le SSCCE pour afficher des problèmes spécifiques.
this.addWindowStateListener(new WindowStateListener() {
@Override
public void windowStateChanged(WindowEvent e) {
if (e.getNewState() == Frame.NORMAL) {
if (getSize().width == 0 || getSize().height == 0) {
setSize(500, 500);
}
}
}
});
Le problème avec c'est que je commence par un cadre maximisé. Et quand je l'a-le-optimiser, votre auditeur sera appelé, mais getize () code> retournera une taille à la fois de largeur et de hauteur supérieure à 0 donc setsize () code> ne sera pas être appelé.
Vous pouvez le tester. À ce moment-là, vous invoquez GETISISE (), et il retournera (0, 0). Parce que vous appelez image.setextensedstate (cadre.maximized_both) et n'invoque pas setsize (). Donc, la taille de l'image est (0,0).
Je l'ai testé. Et getiser () code> m'a renvoyé un dimension code> avec quelque chose près de ma résolution de l'écran.
Vous avez déjà invoqué SetSize ()?
Non, je n'ai pas fait. Je viens d'appeler sextextenseState (maximisé_both) code> et SETVisible (true) code>.
Ok, c'est étrange. Dans mon PC, c'est bon, et la méthode getize () retour (0,0).
Vous avez été proche de répondre à votre tentative SetMaxImizedbounds () code> dans jframe code> classe. Il est utilisé par image sur Maximized_both Code> EXTENDIETE SET pour afficher le cadre de la taille du béton sans scintiller. Ce qui fonctionne pour moi: calculatemaximisébounds () code> calcule les limites maximales (merci, ko!) Pour le cadre, en fonction de l'emplacement et de la taille actuelle - est-ce important si Vous avez plus de 2 moniteurs, surtout s'ils ont des dimensions différentes. P> p>
Je reçois le même résultat si j'include si j'inclus le SetMaximizedbounds () code> ou non (sauf que lorsque j'inclus SetMaxIMizedbounds () code> La taille maximale sera évidemment celle que j'ai définie).
Voulez-vous dire que ce cadre continue de scintiller?
Oui, le même que sans SetMaxImizedbounds () code>. Bien que # 2 b> est le plus proche de ce que je veux, et ce n'est même pas dérangeant ... mais je ne savais pas à propos de SetMaximizedbounds () code> alors merci.
Un autre ps: le cadre ne doit pas être visible avant que cadre.setVisible (true) code> appelé
Oui, c'est le cas.
Le code ci-dessous fonctionne pour moi. J'ai utilisé une idée des perzeurs d'un auditeur de fenêtres, mais je vérifie si l'état de la fenêtre a été modifié de maximisé, mais non minimisé (Ainsi, après la restauration du programme, l'état précédent est récupéré):
setExtendedState(JFrame.MAXIMIZED_BOTH);
this.addWindowStateListener(new WindowStateListener() {
@Override
public void windowStateChanged(WindowEvent e) {
// In Windows10 state 7 is returned if you minimize, usually ICONIFIED should mean the window is minimized, I used JDK1.6 on W10 (don't ask why)..
if (e.getNewState() != JFrame.MAXIMIZED_BOTH && e.getNewState() != 7 && e.getNewState() != JFrame.ICONIFIED) {
setSize(768, 500);
}
}
});
setVisible(true);
Aucune idée sans poster un SSCCE, btw jframe.pack () faire de même
@mkorbel Calling Pack () donne la même chose: je verrai une fenêtre visuelle redimensionner laquelle je veux éviter.
Avez-vous essayé d'essayer de laisser dormir l'EDT pendant une courte période et d'appeler directement votre redîne? peut ne pas fonctionner cependant, mais peut-être sa peine d'essayer. Les solutions laidons résolvent parfois des problèmes laids;)
Le problème @zhedar est que je veux que le cadre reste maximisé. Chaque fois que j'appelle un setsize (), le cadre passe automatiquement à l'état normal de l'état MaxImized_Both.