IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Agents de placement/Fenêtres Java Discussion :

Comment centrer une fenêtre (derivée de JFrame) par rapport à l'ecran ?


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre à l'essai Avatar de ngmsky
    Homme Profil pro
    Inscrit en
    août 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : août 2011
    Messages : 39
    Points : 20
    Points
    20
    Par défaut Comment centrer une fenêtre (derivée de JFrame) par rapport à l'ecran ?
    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>

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    septembre 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2010
    Messages : 35
    Points : 18
    Points
    18
    Par défaut
    Bonsoir.

    Normalement pour centrer une JFrame on fait :
    setLocationRelativeTo(null);

    EDIT :
    Ton code fonctionne chez moi, et la fenêtre est centrée... il manque setVisible(true) par contre mais c'est tout.

  3. #3
    Membre à l'essai Avatar de ngmsky
    Homme Profil pro
    Inscrit en
    août 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : août 2011
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par limp57 Voir le message
    Bonsoir.

    Normalement pour centrer une JFrame on fait :
    setLocationRelativeTo(null);

    EDIT :
    Ton code fonctionne chez moi, et la fenêtre est centrée... il manque setVisible(true) par contre mais c'est tout.
    Bonjour et grand merci pour ton intervention.

    J'espere que tu parles bien du code2 !
    Alors je viens d'utiliser setLocationRelativeTo(null);
    et j'ai egalement ajouter l'instruction setVisible(true);
    juste après la ligne 38 du code2 cad apres : setContentPane(getMonJpanel());

    mais la fenetre s'affiche toujours au coin superieur-gauche de l'ecran.

    Merci pour d'autres suggestions.

    Limp57, peut tu me confirmer si le code qui à marché chez toi est bien le 2 ? enfin, les deux.
    Merci encore à tous pour votre contribution.

    A bientôt

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    juillet 2011
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2011
    Messages : 100
    Points : 89
    Points
    89
    Par défaut
    Bonjour,

    J'ai repris ton code et j'ai seulement rajouté setVisible(true) après setContentPane(getMonJpanel())

    Et la fenêtre est centrée, donc je ne vois pas de problème dans ton code

  5. #5
    Membre à l'essai Avatar de ngmsky
    Homme Profil pro
    Inscrit en
    août 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : août 2011
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    Bonjour à tous ceux qui m'ont fait des propositions, malgré que cela n'a pas marché chez moi.

    Enfin, mon probleme vient d'être resolu par un ami, qui m'a dit de rajouter simplement la methode main() qui manquait à ma class.

    En resumer, voici le code que j'ai rajouter pour resoudre le probleme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public static void main(String[] args)
     {
    	 new test2();
     }
    J'ai egalement ajouter l'instruction : setVIsible(true); juste apres la ligne 38 du code2.

    Merci encore à tous.

    Et ça marche avec ou sans l'instruction s

Discussions similaires

  1. Réponses: 5
    Dernier message: 18/08/2008, 10h49
  2. Comment centrer une fenêtre sur l'écran?
    Par bygui dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 07/04/2006, 11h25
  3. [JFrame] Comment ouvrir une fenêtre maximiser
    Par dadg dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 11/12/2004, 19h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo