12
votes

Java: jframe.setlocacementRelativeto (null) Ne pas centrer la fenêtre sur Ubuntu 10.04 / Gnome 2.30.2 avec OpenJDK 1.6.0_18

échantillon code: xxx

 capture d'écran

est-ce la faute de l'openJDK? Je me souviens d'entendre que ce n'était pas aussi bon que Sun's, mais comme il est devenu la norme pour Ubuntu ou tout ce que j'ai décidé d'y aller. Le programme va probablement courir sur Windows, alors je suppose que je vais devoir vérifier là-bas ... n'importe quel moyen facile de résoudre ce problème de manière indépendante de la plate-forme sans le casser où elle fonctionne déjà?


2 commentaires

Dans votre capture d'écran, le coin supérieur gauche est parfaitement centré. Vous avez juste besoin de le compenser par la hauteur et la largeur du cadre.


Comme indiqué par Evan, ce code appelle SetLecocessionRelativeto () trop tôt dans le code. Il doit être fait après Pack () / SetSize (). Notez également que, dans votre exemple et Evan, l'appel à la base () est redondant si immédiatement suivi par Pack ().


7 Réponses :


5
votes

Un moyen est de positionner manuellement la fenêtre. Placez le code suivant juste après votre appel à pack () . xxx

Disclaimer, ceci n'a été testé que sur Windows.

En outre, vous devez toujours utiliser SetPreFerredSize () au lieu de SETSIZE () .


6 commentaires

@captain, vous obtenez les mêmes résultats que dans votre question?


@captain, essayez de l'exécuter sans diviser getwidth et getheight par 2. Donc: nouveau point (Middle.x - (jframe.getwidth ()), Middle.y - (Jframe.Eteth ()));


@Justin la même chose est arrivé. C'est bizarre parce que je peux fixer l'emplacement normalement, mais aucune de ces méthodes n'a travaillé. Eh bien, je me rends compte que le problème est le jframe Getwidth () et GetHeight (). La largeur a 10 ans, la hauteur est de 30, même si j'ai défini la taille du jframe sur 600 x 600.


@captain, que voulez-vous dire par "définir l'emplacement normalement"?


@cap, également, utilisez SetPreFerredSize () au lieu de SETSIZE ()


@Justin: aha! Le problème a été mis en place (). J'ai dû utiliser SetpreferredSize (). Merci!



21
votes
JFrame jFrame = new JFrame("Test");
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//jFrame.setLocationRelativeTo(null);
jFrame.setSize(600, 600);
jFrame.pack();
jFrame.setVisible(true);
jFrame.setLocationRelativeTo(null); //To center the code
This will correct the problem and center the Jframe

1 commentaires

Fondamentalement, Call Pack () avant SetLocationRelativeto (). En effet, Pack () calcule la taille de la fenêtre, qui est nécessaire pour effectuer le calcul du centrage correctement.



3
votes
jFrame.validate();
This actually works better since pack can change the frame size, while validate leaves the frame size alone.

0 commentaires

2
votes

Je sais que c'est une vieille question, mais SetlocacementRelativeto () fonctionnera mais elle doit être appelée après Pack (). GetWidth () et getheight () renvoie des valeurs différentes (correctes) après l'emballage et c'est pourquoi OP est incapable de centrer.


0 commentaires

3
votes

Juste une précision: Si vous réglez l'emplacement avant la taille du cadre, vous serez centré sur le coin supérieur gauche de la fenêtre car la taille est (0,0). Vous devez définir la taille avant l'emplacement.

JFrame jFrame = new JFrame("Test");
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setSize(600, 600);
jFrame.pack();
jFrame.setLocationRelativeTo(null);
jFrame.setVisible(true);


2 commentaires

Bienvenue à! Pouvez-vous s'il vous plaît développer votre réponse avec un échantillon de code?


Merci. Oui, bien sûr, je modifierai ma réponse. (Désolé pour mon anglais, je suis un étudiant français en informatique).



0
votes

Vous ne devez pas déclarer la taille de la JFRAME avant de donner l'emplacement relatif. Si vous faites ce qui se passe, c'est que cela attirera votre iframe loin de l'emplacement donné.

Ceci est faux ---- P>

JFrame jFrame = new JFrame("Test");
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//size comes first
jFrame.setSize(600, 600);

//and then the position
jFrame.setLocationRelativeTo(null);

jFrame.pack();
jFrame.setVisible(true);


1 commentaires

Dans vos commentaires, vous avez dit que la taille vient d'abord, alors vous emballez le jframe après setlocacementRelativeto ...



1
votes

Il suffit de définir la taille avant régler l'emplacement.

faux: xxx

correct : xxx

Remarque: appelez SETVisible () enfin pour empêcher "sauter" de la fenêtre.


0 commentaires