Java setResizable (false) modifie la taille de la fenêtre (swing)
J'ai un problème étrange. Je suis en utilisant le nul de la mise en page d'une fenêtre (= JFrame et sur windows) et si j'utilise setResizable (false) la taille de la fenêtre est plus grand (à droite et en bas, autour de 10 pixels, je dirais). Je ne sais pas pourquoi.
Les deux println retour de la même taille, ce qui est étrange, aussi...
mainWnd.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainWnd.setTitle(wndTitle);
mainWnd.setBounds(wndPosX, wndPosY, wndWidth, wndHeight);
System.out.println(mainWnd.getHeight() + mainWnd.getWidth());
mainWnd.setResizable(false);
System.out.println(mainWnd.getHeight() + mainWnd.getWidth());
Est-ce que qqn a une idée? Pourquoi la fenêtre est redimensionnée?
Mise à JOUR:
Même chose ici (le compiler avec et sans le setResizable et que vous pouvez voir, si vous le chevauchement des fenêtres):
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main
{
private static JFrame mainWnd = null;
public static void main(String[] args)
{
mainWnd = new JFrame();
mainWnd.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainWnd.setTitle("asda");
mainWnd.setBounds(50, 50, 300, 300);
mainWnd.setResizable(false);
mainWnd.setVisible(true);
}
}
source d'informationauteur immerhart
Vous devez vous connecter pour publier un commentaire.
Il ne change pas sur mon exemple, si vous devez avoir quelque chose d'autre que les causes de votre problème:
MODIFIER/MISE À JOUR:
En quelque sorte les encarts sont incorrects lorsque vous définissez la redimensionnable à faux (au moins sur Windows 7 et JDK 6). En quelque sorte, elles changent de 30,8,8,8 à 25,3,3,3 bien que la frontière (qui est peint par l'OS) reste en fait de même. Depuis les encarts sont en partie les limites du Cadre, le cadre est en fait trop grande (visuellement) quand il n'est pas redimensionnable. Pour moi, il semble comme il y a un bug dans le calcul des encarts lorsque le cadre n'est pas redimensionnable.
Si vous définissez setResizable faux avant de fixer les limites, vous n'aurez pas le problème. comme Gergely Szilagyi a dit avant, vous devez vous débarrasser des barres de défilement, mais la taille de la fenêtre est verrouillée et, par conséquent, vous vous retrouvez avec 9 ou 10 pixels de l'espace supplémentaire dans le cadre. J'ai juste eu le même problème. merci pour l'aide.
Selon L&F réglage de la redimensionnable(faux/vrai) pourrait changer la bordure de fenêtre décorations. Pas de maximiser, pas de redimensionnement de la flèche. Qui lui-même peut changer de taille.
Remplacer:
:
Eh bien, j'ai rencontré ce problème, et c'est un Look & Feel problème...
Pourquoi le cadre redimensionnable a un empiècement de (5, 5, 5, 5)? Il me conduit à penser que faire redimensionnable ajoute quelques élément supplémentaire autour de l'image, comme... une sorte de "gestionnaire" à faire glisser pour redimensionner?
Et puis j'ai trouvé que si nous utilisons par défaut de Java Métal l&f et l'ensemble
setDefaultLookAndFeelDecorated(true)
le gestionnaire sera peint et, ainsi, l'image ne changent pas de taille. Mais dans Nimbus, et le Motif de Windows L&F ce point n'est pas mis en œuvre, de sorte que c'est un bug. Je vais le signaler.À ma propre question et ma réponse avec le GIF est ici:
Swing - setResizable(vrai) faire JFrame barre de titre supérieur et de la taille de la fenêtre plus petite
À ce jour le meilleur patch pour cet ennuyeux problème est le suivant. N'a pas d'importance où vous appelez la
setResizable(false)
méthode. Il suffit d'ajouter ce bout de code après voussetVisible(true)
.Où
yourWidth
est le largeur vous avez défini dans l'une quelconque des manières possibles, que ce soit manuellement ou par des raisons impérieusessetPreferredSize
méthodes. L'explication est assez simple,frame.pack()
semble pour réinitialiserframe.setResizable(boolean b)
en quelque sorte. Vous pouvez utiliser unif
au lieu de lawhile
boucle, mais je préfèrewhile
d'exclure le cas de la fenêtre serait encore supplémentaire de taille, même après un deuxièmepack()
.J'ai un 2 JFrame sous-classes définies. Si je lance le problème de l'image dans une application autonome, la taille de la trame est correcte. Si je lance les deux images dans une application autonome, le problème de l'image est encore plus grande. Je n'ai setResizable(false) avant de pack, et je reçois toujours le problème. Ma solution a été de changer la mise en page à BorderLayout et plop (image) dans le panneau de centre, puis a fait le setResizable.