Bonjour à tous !
Je me suis aperçu il y a quelques temps déjà que la dimension que l'on attribue à une JFrame c'est en fait la dimension totale de la fenêtre, barre de titre et bordures comprises.
Je me suis adapté à celà en retirant quelques pixels à la taille du JPanel contenu dans la JFrame et on n'y voit que du feu. Mais bon, c'est du bricolage tout ça, ce n'est pas très propre comme façon de faire. Surtout que je me suis aperçu que Windows 10 et Linux Mint ne gèrent pas les fenêtres comme sur mon ordi (je suis sous Windows 7). En effet, ces dernières sont bien plus fines sous W10 ou LM.
Du coup j'ai cherché un moyen de récupérer la taille "utile" de la fenêtre pour ainsi redimensionner correctement mon JPanel.
Voilà ce que j'ai fait (dans ma JFrame) :
Ensuite j'ai ajouté "this.pack();" avant le code précédemment cité. Là j'ai récupéré des valeurs que je suppose être les valeurs des bordures (pour x et y). Donc c'est parfait ! (ou pas)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Dimension size = getSize(); // ça me retourne "0" Insets insets = this.getInsets(); int x = insets.left; // ça me retourne "0" int y = insets.top; // ça me retourne "0" int h = getContentPane().getHeight(); // ça me retourne "0" int w = getContentPane().getWidth(); // ça me retourne "0" int a = getHeight(); // ça me retourne la hauteur totale de la fenêtre donc pas intéressant. int b = getWidth(); // ça me retourne la largeur totale de la fenêtre donc pas intéressant.
Sauf que ça me foire mon affichage...
La fenêtre n'est plus aux dimensions que j'avais défini. Elle est tronquée en bas et les éléments de mes différents panels ont été placés sur la droite mais ils ne rentrent pas tous dans la fenêtre. Enfin c'est le bordel.
Du coup, existe-t-il un moyen autre de récupérer la taille utile ou la taille des bordures de la fenêtre ?
Je précise que ma fenêtre est construite de cette façon (ça peut expliquer le bug avec "pack()") : 1 JFrame ayant 1 JPanel comme contentpane et ce dernier m'affiche une image de fond. Il contient lui-même 3 JPanel disposés en BorderLayout qui contiennent les différents textes et boutons nécessaires au fonctionnement du programme.
Partager