Bonjour,
Je suis entrain de programer une application en java. Etant debutant, je suis bloqué quelque part.
En resumer :
Je n'arrive pas à centrer mon JFrame par-rapport l'ecran alors que j'utilise bien la bonne méthode :
JFrame.setLocationRelativeTo(this.getParent());
En réalité ça marche losrque je declare JFrame mais pas losrque je declare une class qui hérite (extends) de JFrame.
Un code vaudra mieux que le blabla.
Voici donc les deux codes en question :
code1 : [B] declaration d'une JFrame : Resultat : le centrage marche tres bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 package pkg1; import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.BorderLayout; import java.awt.Dimension; public class test1 { private JFrame maFrame = null; private JPanel monJpanel = null; public test1() { getMaFrame(); } private JFrame getMaFrame() { if (maFrame == null) { maFrame = new JFrame(); maFrame.setSize(new Dimension(764, 325)); maFrame.setTitle("TEST 1 "); maFrame.setContentPane(getMonJpanel()); // Centrere MaFrame (fenetre par-rapport à l'ecran) maFrame.setLocationRelativeTo(maFrame.getParent()); maFrame.setVisible(true); } return maFrame; } private JPanel getMonJpanel() { if (monJpanel == null) { monJpanel = new JPanel(); monJpanel.setLayout(new BorderLayout()); } return monJpanel; } }
code2 : Ici la classe principale est héritiere de JFrame. Resultat : le centrage ne marche pas du tout.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 package pkg1; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.WindowConstants; import java.awt.BorderLayout; import java.awt.Dimension; public class test2 extends JFrame { // private JFrame maFrame = null; // VU que la class "test2" a hérité de JFrame, nous ne pouvons plus declarer ce JFrame, cequi était valable dans le 1er cas. private JPanel monJpanel = null; // methode par defaut = main de notre class public test2() { super(); // permet de lancer le constructeur de la super-class (ici JFrame) initialize(); // appel le constructeur de la sous-class (ici test2) } // NB : pour cette methode, j'ai les mêm resultats avec ou sans les "this.xxxx". J'ai donc choisi ne pas les mettre pour avoir un bonne lisibilité du code. private void initialize() { setTitle("TEST 2"); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); setSize(new Dimension(764, 325)); // Centrer la JFrame (fenetre par-rapport à l'ecran) setLocationRelativeTo(this.getParent()); setContentPane(getMonJpanel()); } private JPanel getMonJpanel() { if (monJpanel == null) { monJpanel = new JPanel(); monJpanel.setLayout(new BorderLayout()); } return monJpanel; } }
J'ai même éssayer de faire :
super.setLocationRelativeTo(this.getParent());
et aussi
this.pack();
this.setLocation( (screenSize.width-this.getWidth())/2 , (screenSize.height-this.getHeight())/2 );
mais sans succes.
Je pricise que les deux fenetres s'affichent bien, c'est juste que test2 n'est pas centré.
En vous remerciant d'avance, j'attends impatiemment vos propositions.
Config : [/download/telecharger-34055539-ubuntu ubuntu] 10.04 + EasyEclipse ([/download/telecharger-34075627-eclipse-ide-pour-developpeurs-java eclipse] + visual Editor)
<config>Linux / Safari 535.1</config>
Partager