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

AWT/Swing Java Discussion :

Comment centrer veticalement un JLabel dans un JPanel (dont la methode prefSize a été appliquée) ?


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Autodidacte
    Inscrit en
    Décembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Décembre 2016
    Messages : 12
    Points : 14
    Points
    14
    Par défaut Comment centrer veticalement un JLabel dans un JPanel (dont la methode prefSize a été appliquée) ?
    Toute la questino est dans la titre

    Voici le code de la classe du JPanel contenant le JLabel:

    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
     
    import javax.swing.*;
    import java.awt.*;
     
     
    public class Panneau0a extends JPanel {
    	public Font f = new Font("Arial", Font.BOLD, 15);
     
    	public Panneau0a() {
     
    		JLabel label0 = new JLabel("Question");
    		label0.setFont(f);
    		label0.setForeground(Color.BLACK);
     
    		this.setBackground(Color.RED);
    		this.setPreferredSize(new Dimension(100, 100));
    		this.add(label0);
     
    		label0.setVerticalAlignment(JLabel.CENTER);
    		label0.setHorizontalTextPosition(JLabel.CENTER);
    	}
     
    }
    Merci d'avance J'ai fait quelques recherches sur Google mais rien de ce que j'ai trouvé n'a marché. Je suppose que c'est du au fait que j'ai donner une PreferredSize a mon JPanel.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,
    Citation Envoyé par Seloa Voir le message
    Je suppose que c'est du au fait que j'ai donner une PreferredSize a mon JPanel.
    Peu de risque que ça soit ça : ça n'a pas d'influence sur le placement des composants dans le panel.

    Si ton JLabel est seul dans le JPanel, un moyen simple pour centrer est de layouter le panel avec un GridBagLayout, en ajoutant setLayout(new GridBagLayout()); dans le constructeur. Si le but est de centre uniquement verticalement, tu peux utiliser un BoxLayout : setLayout(new BoxLayout(this, BoxLayout.X_AXIS));. Le JLabel sera cadré à gauche : pour le cadrer à droite, il suffit d'ajouter un filler avant d'ajouter le label :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    JPanel filler=new JPanel();
    filler.setOpaque(false);
    add(filler);
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 40
    Points : 46
    Points
    46
    Par défaut salut
    ajouter le code:
    label0.setSize(80,40);// a votre choix le size
    label0.setLocation((5, (this.getSize().height - label0.getSize().height)/2); // a votre choix le x= 5 exp ici
    label0.setVerticalTextPosition(JLabel.CENTER);

    this.doLayout();
    this.validate();
    ////////

    et si tu veux la horizontal et vertical:

    label0.setLocation((this.getSize().width - label0.getSize().width)/2, (this.getSize().height - label0.getSize().height)/2);

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par imad24 Voir le message
    et si tu veux la horizontal et vertical:


    label0.setLocation((this.getSize().width - label0.getSize().width)/2, (this.getSize().height - label0.getSize().height)/2);
    Certainement pas : le layout manager repositionnera le composant dès qu'il sera invoqué.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 40
    Points : 46
    Points
    46
    Par défaut ...
    ajouter le code:
    this.setSize(100, 100);// a votre choix le size
    label0.setVerticalTextPosition(JLabel.CENTER);
    abel0.setSize(80,40);// a votre choix le size
    label0.setLocation(5, (this.getSize().height - label0.getSize().height)/2); // a votre choix exp ici x-coordinate = 5



    ////////

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    taille et emplace (setSize() et setLocation()) ne doivent pas être utilisés lorsqu'on a un layout manager sur une vue (et il vaut toujours mieux en avoir que faire du layout absolu, pour avoir une vue "responsive" !)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 40
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    taille et emplace (setSize() et setLocation()) ne doivent pas être utilisés lorsqu'on a un layout manager sur une vue (et il vaut toujours mieux en avoir que faire du layout absolu, pour avoir une vue "responsive" !)

    on suppose ici que layout manager est null ; this..setLayout(null);

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par imad24 Voir le message
    on suppose ici que layout manager est null ; this..setLayout(null);
    Pourquoi supposer quelque chose qui est faux, et qu'il ne faut pas faire ! Pourquoi insister avec une mauvaise solutions alors qu'il existe de meilleures solutions, plus souples, plus efficaces, plus générales ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 40
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Pourquoi supposer quelque chose qui est faux, et qu'il ne faut pas faire ! Pourquoi insister avec une mauvaise solutions alors qu'il existe de meilleures solutions, plus souples, plus efficaces, plus générales ?
    moi tout simplement je pose une solution pour le probléme posé, et j ai pas dit c'est le meilleur

  10. #10
    Membre à l'essai
    Homme Profil pro
    Autodidacte
    Inscrit en
    Décembre 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Décembre 2016
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Salut,

    Peu de risque que ça soit ça : ça n'a pas d'influence sur le placement des composants dans le panel.

    Si ton JLabel est seul dans le JPanel, un moyen simple pour centrer est de layouter le panel avec un GridBagLayout, en ajoutant setLayout(new GridBagLayout()); dans le constructeur. Si le but est de centre uniquement verticalement, tu peux utiliser un BoxLayout : setLayout(new BoxLayout(this, BoxLayout.X_AXIS));. Le JLabel sera cadré à gauche : pour le cadrer à droite, il suffit d'ajouter un filler avant d'ajouter le label :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    JPanel filler=new JPanel();
    filler.setOpaque(false);
    add(filler);

    Parfait. Simple et efficace. Merci a toi !

    Et Merci quand même a imad

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme avec l'ajout d'un JLabel dans un JPanel
    Par Leoo31 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 24/03/2010, 16h21
  2. Comment centrer une image insérée dans un JtextPane ?
    Par med_anis_dk dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 07/06/2007, 21h23
  3. comment centrer un JLabel dans un JPanel ?
    Par med_anis_dk dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 26/05/2007, 20h59
  4. Comment centrer mon div imbriquer dans un autre
    Par pierrot10 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 03/12/2006, 13h15

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