Comment configurer JFrame pour qu'il apparaisse centré, quelle que soit la résolution du moniteur? [fermé]

197

Lorsque je travaille avec Java, j'ai du mal à positionner ma fenêtre principale au centre de l'écran lorsque je démarre l'application.

Existe-t-il un moyen de le faire? Il n'est pas nécessaire qu'il soit centré verticalement, l'alignement horizontal est l'objectif le plus important pour moi. Mais l'alignement vertical est également le bienvenu.

AmateurProgrammeur
la source

Réponses:

232

Je l'ai toujours fait de cette façon:

Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation(dim.width/2-this.getSize().width/2, dim.height/2-this.getSize().height/2);

thisest le JFrame impliqué.

Jack
la source
1
Je sais que cette réponse est vraiment ancienne, mais existe-t-il un moyen possible de le faire dans un contexte statique? Je décide entre travailler dans ce sens ou simplement supprimer le vide public statique principal (arguments String []) que je souhaitais utiliser pour une raison quelconque.
2xedo
14
Cela fonctionnera dans une configuration à un seul moniteur, mais avec deux moniteurs, il peut sembler chevauchant les deux (en supposant qu'ils ont la même résolution). L'utilisation setLocationRelativeTo(null)le centrera sur le moniteur principal, même dans une configuration à plusieurs moniteurs.
Rangi Keen
1
Gardez à l'esprit que vous devez rendre le JFrame visible AVANT de le centrer.
Hunter S
4
@HunterS: c'est incorrect. En fait, il est recommandé de ne pas le rendre visible avant de l'avoir centré. De cette façon, il n'apparaîtra pas puis sautera. Tant que vous avez emballé le cadre ou défini les dimensions avant le code dans cette réponse, tout ira bien.
Erick Robertson
520

Utilisation setLocationRelativeTo(null)

Cette méthode a un effet spécial lorsque vous la passez a null. Selon le Javadoc:

Si le composant est nul ou que la GraphicsConfiguration associée à ce composant est nulle, la fenêtre est placée au centre de l'écran.

Cela devrait être fait après avoir défini la taille ou appelé pack(), mais avant de le rendre visible, comme ceci:

frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
JRL
la source
102
+1 si la méthode pack () est utilisée, setLocationRelativeTodoit être utilisée après l'appel de la méthode pack ()
Ravindra Gullapalli
6
@Imray, car il ne fonctionne probablement pas avec une configuration à deux écrans. : P
Ankit
17
Il semble que cette méthode doive être appelée après .setSize().
Kamil
6
Cela fonctionne dans une configuration multi-écrans et comme indiqué dans les commentaires, il doit être appelé après pack () et setSize () s'ils sont appelés.
Paul Gregoire
2
@Ankit, cela fonctionne parfaitement avec ma configuration à deux moniteurs. La «meilleure» réponse est toujours choisie par le PO.
Kent
59

Vous pouvez appeler JFrame.setLocationRelativeTo(null)pour centrer la fenêtre. Assurez-vous de mettre cela avantJFrame.setVisible(true)

Greg
la source
20
+1 si la méthode pack () est utilisée, setLocationRelativeTodoit être utilisée après l'appel de la méthode pack ()
Ravindra Gullapalli
29

Cliquez simplement sur le formulaire et accédez aux propriétés JFrame, puis sur l'onglet Code et vérifiez Generate Center.

entrez la description de l'image ici

علاء علام
la source
je n'y ai jamais pensé. Quoi qu'il en soit, que diriez-vous du code qui fonctionne derrière lui-même après avoir cliqué sur ce ....? @HenkVanBoeijen
gumuruh
11

Aussi simple que cela ...

setSize(220, 400);
setLocationRelativeTo(null);  

ou si vous utilisez un cadre, réglez-le sur

frame.setSize(220, 400);
frame.setLocationRelativeTo(null);  

Pour plus de précisions, à partir des documents :

Si le composant est nul ou que la GraphicsConfiguration associée à ce composant est nulle, la fenêtre est placée au centre de l'écran.

Vogel612
la source
7

j'utilise NetBeans IDE 7.2.1 comme environnement de développement pour mon développeur et là vous avez la possibilité de configurer les propriétés JForm.

dans les propriétés JForm, allez dans l'onglet 'Code' et configurez le 'Generate Center'. vous devrez d'abord définir la politique de taille de formulaire sur «Générer un code de redimensionnement».

Asaf Magen
la source
6

J'utilise NetBeans IDE 7.3 et c'est ainsi que je procède pour centraliser mon JFrame Assurez-vous de cliquer sur le panneau JFrame et accédez à votre barre de propriétés JFrame, cliquez sur la barre de code et cochez la case Générer le centre.

Gstuntz
la source
2

Si vous utilisez NetBeans, cliquez simplement sur le cadre dans la vue de conception, puis sur l'onglet de code sur ses propriétés. Ensuite, cochez «Générer le centre». Cela fera le travail.

Kingsley Ijike
la source
1

Si vous explicitement setPreferredSize(new Dimension(X, Y));alors il vaut mieux utiliser:

setLocation(dim.width/2-this.getPreferredSize().width/2, dim.height/2-this.getPreferredSize().height/2);


la source
1

Vous pouvez utiliser cette méthode, qui permet au JFrame d'être centré et plein écran en même temps.

yourframe.setExtendedState(JFrame.MAXIMIZED_BOTH);
L'Appsolit
la source
0

Dans l'interface graphique de Net Beans - accédez aux propriétés jframe ( clic droit sur jFrame dans le navigateur), sous code , propriété de stratégie de taille de formulaire , sélectionnez Générer le code de redimensionnement . Dans la même fenêtre, décochez Générer la position et cochez Générer la taille et le centre .

Profitez de la programmation. Ramana

KV Ramana
la source