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 :

Positionner un composant au centre d'un JPanel


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2004
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 98
    Points : 63
    Points
    63
    Par défaut Positionner un composant au centre d'un JPanel
    Bonjour.

    Tout est dans le titre.
    Je cherche à positionner un JTextFiled au centre d'un JPanel.
    J'ai essayé de bien des manières, rien ne fonctionne...

    Ce que je voudrait, c'est que la taille du JTextField soit calculée à partir de sa police et de son nombre de colonnes, et que, une fois sa taille établie, le champ de texte soit positionné au centre du JPanel.
    Au cas où ce serait utile, je précise que mon JPanel serait logé dans un Box (au sens BoxLayout du terme)...

    Toute aide sera la bienvenue.
    Merci.

  2. #2
    Membre habitué

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2020
    Messages : 167
    Points : 162
    Points
    162
    Par défaut une piste
    bonjour,

    pour ma part, je mettrais le layout de mon Jpanel support sur null, et je gérerais moi-même en pixel la position sur x et y.

    Quand la taille du JTextField est établie, je récupèrerai la taille de mon panel, et avec ces deux dimensions, il est aisé de calculé la position en x et y de ton JTextField pour qu'il soit au centre du JPanel.

    Par contre, je ne saisis pas trop "le nombre de colonnes"... C'est un JTextField ou un tableau que tu veux mettre au centre?..

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2004
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 98
    Points : 63
    Points
    63
    Par défaut
    Bonjour Pat.

    Merci pour ta réponse.

    C'est bien un JTextField que je veux positionner. Quand je parle du nombre de colonnes, je parle du chiffre que l'on renseigne dans le constructeur de la classe (intitulé "columns" dans la doc Java).
    J'ai pensé à la solution que tu me propose ou à plusieurs autres qui lui ressemblent, mais je ne sait ni quand ni comment la dimension du JTextField est calculée... Donc en l'état, je ne peux pas me baser sur cette dimension.

    J'espérais un moyen très simple, je vois qu'il n'y en a peut-être pas, aussi surprenant que ça peut l'être !!

    Du coup ce que je cherche c'est comment mettre le JTextField au centre du JPanel, et ce quelles que soient les dimensions du JTextField...

  4. #4
    Membre habitué

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2020
    Messages : 167
    Points : 162
    Points
    162
    Par défaut suite
    en effet, il y a bien des "colonnes" pour un JtextField.
    Il y a la méthode "getColumnWdith(), qui récupère la largeur d'une colonne. Apparemment une colonne correspond à la largeur pour un caractère dans la police choisie.
    La dimension de ton objet se définit à la construction dans un premier temps.

    Si tu fixes au départ, une police et un nombre de colonnes, ton JTextField aura une taille fixe, qu'il te suffit de récupérer.

    Si le nombre de colonnes varie en fonction de la dimension du contenu que tu stockes dans ton JTextfield, récupère, après l'affectation du nombre, la nouvelle largeur de ton objet, et tu devrais pouvoir le centrer dans ton JPanel il me semble.

  5. #5
    Membre habitué
    Homme Profil pro
    Admin systèmes (Windows, Linux) et réseaux - Dev DB &Java IHM calcul scientifique
    Inscrit en
    Mai 2016
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Admin systèmes (Windows, Linux) et réseaux - Dev DB &Java IHM calcul scientifique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 76
    Points : 140
    Points
    140
    Par défaut
    Citation Envoyé par amauryxiv Voir le message
    Bonjour.

    Tout est dans le titre.
    Je cherche à positionner un JTextFiled au centre d'un JPanel.
    J'ai essayé de bien des manières, rien ne fonctionne...

    Ce que je voudrait, c'est que la taille du JTextField soit calculée à partir de sa police et de son nombre de colonnes, et que, une fois sa taille établie, le champ de texte soit positionné au centre du JPanel.
    Au cas où ce serait utile, je précise que mon JPanel serait logé dans un Box (au sens BoxLayout du terme)...

    Toute aide sera la bienvenue.
    Merci.
    Bonjour amauryxiv,
    En général il vaut mieux préférer les Layout Managers au positionnement absolu (coordonnées pixel), ici le GridBagLayout peut faire l'affaire
    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
     
    public class PanneauText extends JPanel{
        private JTextField jtf ;
        public PanneauText() {
            super() ;
            this.setLayout(new GridBagLayout());
            jtf = new JTextField ();
            jtf.setText("COUCOU");
            this.add(jtf ) ;
        }
     
        public void setText(String s){
            jtf.setText(s);
        }
    }
    Le problème restant est que lors de la mise à jour du champ JTextField , son contenu risque d'être amputé
    Alors il faut provoquer le compactage de la JFrame qui est à la racine par un appel à pack()
    Exemple :

    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
     
    public class PanneauCommande extends JPanel {
        private PanneauText panText ;
        private FenetrePrincipale fenPal ;
     
        public PanneauCommande(PanneauText panText) {
            super() ;
            this.panText = panText  ;
     
            this.setPreferredSize(new Dimension(210,300));  
     
            JButton buttonChange = new JButton("Change Text");
            buttonChange.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    panText.setText("Salut les gros loups de la plaine abyssale");
                    fenPal.pack();
                }
            });
            this.add(buttonChange);
        }    
     
        public void setFenPal(FenetrePrincipale fenPal) {
            this.fenPal = fenPal;
        }    
    }
    Avant Click
    Nom : Avant.PNG
Affichages : 51
Taille : 4,5 Ko

    Après Click
    Nom : Apres.PNG
Affichages : 49
Taille : 5,4 Ko

    Cordialement

  6. #6
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2004
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 98
    Points : 63
    Points
    63
    Par défaut
    Bonjour kick54.

    Merci pour ta réponse !

    Il semble que ça marche !! J'ai collé un GridBagLayout à mon JPanel, sans rien changer d'autre, et mon JTextField est centré verticalement. C'est exactement ce que je voulais .

    Voilà qui est simple et efficace . Merci beaucoup pour cet excellent conseil.

    Pour patdu26: oui , j'ai bien compris comment est calculé la largeur d'un JTextField... Mais il y a aussi sa hauteur (qui doit, je suppode être fonction de la police); la hauteur compte pour le centrage vertical.

    Encore une fois mille merci à tous les deux.
    Au plaisir.

Discussions similaires

  1. Positionnement des composants sur JPanel
    Par zpico dans le forum AWT/Swing
    Réponses: 10
    Dernier message: 19/10/2011, 14h43
  2. Réponses: 6
    Dernier message: 19/02/2008, 20h48
  3. positionner les pages au centre
    Par speedylol dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 08/11/2006, 11h18
  4. [SWING] GridBagLayout positionnement des composants
    Par rprom1 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 28/03/2006, 15h54
  5. Réponses: 17
    Dernier message: 17/03/2006, 17h15

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