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 :

aligner des JTextField


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 469
    Par défaut aligner des JTextField
    J'ai une interface graphiquie comme ci-dessous
    Nom : Capture d’écran 2025-04-28 180933.jpg
Affichages : 56
Taille : 117,4 Ko
    Le panneau principal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	protected void initComponent()
    	{
    		JPanel panneau = new JPanel();
    		panneau.setLayout(new BorderLayout());
    		panneau.setBackground(Constantes.fondDialogue);
    		panneau.add(creerInformations(), BorderLayout.NORTH);
    		panneau.add(creerCentre(), BorderLayout.CENTER);
    		panneau.add(new PanneauControle(this), BorderLayout.SOUTH);
    		add(panneau);
    		pack();
    		Ecran.centrer(this);
    	}
    Le centre est une VerticalBox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	private Component creerCentre()
    	{
    		Box boite = Box.createVerticalBox();
    		boite.add(Box.createVerticalGlue());
    		boite.add(creerPort());
    		boite.add(Box.createVerticalGlue());
    		boite.add(creerTexte("nom de la base", "genealogie"));
    		boite.add(Box.createVerticalGlue());
    		boite.add(creerTexte("mot de passe", "Patrice"));
    		boite.add(Box.createVerticalGlue());
    		boite.add(creerTexte("nom du schema", "patrice"));
    		boite.setAlignmentX(0.5f);
    		return boite;
    	}
    Les composant de texte
    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
     
    	private Component creerTexte(String s, String st)
    	{
    		JPanel panneau = new JPanel();
    		panneau.setBackground(Constantes.fondDialogue);
     
    		JLabel     label  = new JLabel(s + " : ");
    		JTextField jtf    = new JTextField();
    		JLabel     label1 = new JLabel("par défaut : " + st);
    		jtf.setEditable(true);
    		jtf.setText(st);
    		panneau.add(label);
    		panneau.add(jtf);
    		panneau.add(label1);
    		panneau.setBorder(
    				BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
    		jtf.addFocusListener(this);
    		jtf.addActionListener(this);
    		jtf.setName(s);
    		return panneau;
    	}
    Et quelque chose du même genre pour la ligne port

    Je voudrai que les labels "Port :";, "nom de la base :" , ... soient alignés à gauche , que les JTextField soient alignés verticalement ainsi que les labels qui suivent.

    Je ne me rapelle plus comment j'avais fait il y a quelques années

    Cordialement.
    C'est en respectant les autres que l'on se fait respecter.

  2. #2
    Membre chevronné
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 341
    Par défaut
    Soit avec un positionnement absolu. C'est facile mais ça ne s'adate pas du tout aux tailles d'écrans et au contenu de votre application.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    panel.setLayout(null);
     
    field.setBounds(...);
    panel.add(field);
    Soit avec un layout plus avancé qui va redimenssionner dynamiquement vos élements et éventuellement recalculer leurs positions. Le GridBagLayout inclus de base fonctionne très bien mais il est parfois trop verbeux pour certains (perso, c'est mon favori). D'autres utilisent FormLayout ou MigLayout. Les noms sont à vérifier..

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 469
    Par défaut
    Citation Envoyé par gervais.b Voir le message
    Soit avec un positionnement absolu. C'est facile mais ça ne s'adate pas du tout aux tailles d'écrans et au contenu de votre application.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    panel.setLayout(null);
     
    field.setBounds(...);
    panel.add(field);
    Soit avec un layout plus avancé qui va redimenssionner dynamiquement vos élements et éventuellement recalculer leurs positions. Le GridBagLayout inclus de base fonctionne très bien mais il est parfois trop verbeux pour certains (perso, c'est mon favori). D'autres utilisent FormLayout ou MigLayout. Les noms sont à vérifier..
    Merci pour votre réponse
    Effectivement c'est ce vers quoi je me suis tourné. Je l'ai peu utilisé par le passé, le trouvant trop compliqué.
    Ceci étant le résultat n'est pas ce que j'espérais. Je ne dois pas utiliser correctement les contraintes.
    Voici le code
    Pour la ligne du port :
    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
    	private Component creerPort()
    	{
    		JPanel panneau = new JPanel();
    		panneau.setBackground(Constantes.fondDialogue);
    		panneau.setBorder(
    				BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
    		panneau.setLayout(new GridBagLayout());
    		GridBagConstraints contraintes = new GridBagConstraints();
    		contraintes.fill    = GridBagConstraints.HORIZONTAL;
    		contraintes.weightx = 1;
    		contraintes.gridy   = 0;
     
    		JLabel label = new JLabel("Port : ");
    		contraintes.gridx = 0;
    		contraintes.anchor = GridBagConstraints.LAST_LINE_START;
     
    		panneau.add(label, contraintes);
     
    		TextFieldNumerique tfn    = new TextFieldNumerique(5433, false, 0,
    				65535, 5);
    		tfn.addActionListener(this);
    		tfn.addFocusListener(this);
    		contraintes.gridx = 1;
    		panneau.add(tfn, contraintes);
     
    		JLabel label1 = new JLabel("5433 ou 5432", SwingConstants.CENTER);
    		contraintes.gridx = 2;
    		panneau.add(label1, contraintes);
     
    		return panneau;
    	}
    Pour les lignes suivantes
    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
    	private Component creerTexte(String s, String st)
    	{
    		JPanel panneau = new JPanel();
    		panneau.setBackground(Constantes.fondDialogue);
    		panneau.setBorder(
    				BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
    		panneau.setLayout(new GridBagLayout());
    		GridBagConstraints contraintes = new GridBagConstraints();
    		contraintes.fill = GridBagConstraints.HORIZONTAL;
    		// contraintes.weightx = 1;
    		// contraintes.weighty = 1;
    		contraintes.gridy   = 0;
    		contraintes.gridwidth  = 1;
    		contraintes.gridheight = 1;
    		contraintes.ipadx      = 2;
     
    		JLabel label = new JLabel(s + " : ", SwingConstants.LEFT);
    		contraintes.anchor = GridBagConstraints.FIRST_LINE_START;
    		contraintes.gridx = 0;
    		panneau.add(label, contraintes);
     
    		JTextField jtf = new JTextField(st);
    		jtf.addActionListener(this);
    		jtf.addFocusListener(this);
    		jtf.setName(st);
    		contraintes.gridx = 1;
    		contraintes.anchor = GridBagConstraints.PAGE_START;
    		panneau.add(jtf, contraintes);
     
    		JLabel label1 = new JLabel("par défaut : " + st);
    		contraintes.anchor = GridBagConstraints.FIRST_LINE_END;
    		contraintes.gridx = 2;
    		panneau.add(label1, contraintes);
     
    		return panneau;
    	}
    et le résultat
    Nom : Capture d’écran.jpg
Affichages : 22
Taille : 113,3 Ko
    Même pour les 3 dernières lignes (nom de la base, mot de passe, nom du schéma) cela ne donne pas ce que je voudrais. Peut-être que je devrais jouer avec les preferredSize, et/ou minimumSize, MaximumSise des composants de la ligne.
    Je préfère éviter les setLayout(null)
    C'est en respectant les autres que l'on se fait respecter.

  4. #4
    Membre chevronné
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 341
    Par défaut
    Avez-vous essayé de donner un `weightx` ? Sans "poids", les élements ne vont pas s'étendre correctement.

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 469
    Par défaut
    Citation Envoyé par gervais.b Voir le message
    Avez-vous essayé de donner un `weightx` ? Sans "poids", les élements ne vont pas s'étendre correctement.
    Oui j'ai essayé mais sans succès. Merci de votre aide.
    J'ai fini par résoudre mon problème mais en utilisant des dimensions maximum absolues, ce qui n'est pas forcément très propre et revient un peu au placement absolu que vous proposiez. J'ai utilisé aussi un BorderLayout.
    Voici le résultat
    Nom : Capture d’écran.jpg
Affichages : 24
Taille : 107,8 Ko
    et le code
    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
    50
    51
    52
    	private Component creerPort()
    	{
    		JPanel panneau = new JPanel();
    		panneau.getPreferredSize();
    		panneau.setBackground(Constantes.fondDialogue);
    		panneau.setLayout(new BorderLayout());
    		panneau.setMaximumSize(new Dimension(500, 30));
     
    		JLabel label = new JLabel("Port : ", SwingConstants.RIGHT);
    		label.setPreferredSize(new Dimension(110, 30));
     
    		TextFieldNumerique tfn = new TextFieldNumerique(5433, false, 0,
    				65535, 5);
    		tfn.setEditable(true);
    		tfn.addFocusListener(this);
    		tfn.addActionListener(this);
    		tfn.setMaximumSize(new Dimension(120, 30));
     
    		JLabel label1 = new JLabel(" 5433 ou 5432");
    		label1.setPreferredSize(new Dimension(150, 30));
     
    		panneau.add(label, BorderLayout.WEST);
    		panneau.add(tfn, BorderLayout.CENTER);
    		panneau.add(label1, BorderLayout.EAST);
     
    		return panneau;
    	}
    ../...
    	private Component creerTexte(String s, String st)
    	{
    		JPanel panneau = new JPanel();
    		panneau.setBackground(Constantes.fondDialogue);
    		panneau.setLayout(new BorderLayout());
    		panneau.setMaximumSize(new Dimension(500, 30));
     
    		JLabel label = new JLabel(s + " : ", SwingConstants.RIGHT);
    		label.setPreferredSize(new Dimension(110, 30));
     
    		JTextField jtf = new JTextField(st);
    		jtf.setEditable(true);
    		jtf.addFocusListener(this);
    		jtf.addActionListener(this);
     
    		JLabel label1 = new JLabel(" par défaut : " + st);
    		label1.setPreferredSize(new Dimension(150, 30));
     
    		panneau.add(label, BorderLayout.WEST);
    		panneau.add(jtf, BorderLayout.CENTER);
    		panneau.add(label1, BorderLayout.EAST);
     
    		return panneau;
    	}
    Les valeurs dans le setMaximumSize ont été obtenues empiriquement.
    Images attachées Images attachées  
    C'est en respectant les autres que l'on se fait respecter.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Admin systèmes (Windows, Linux) et réseaux - Dev DB &Java IHM calcul scientifique
    Inscrit en
    Mai 2016
    Messages
    90
    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 : 90
    Par défaut
    Bonjour,
    Pourriez-vous déposer un dessin (à main levée pris en photo) du résultat que vous souhaitez ?
    Cdlt

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

Discussions similaires

  1. [FLASH 8] Alignement des images?!
    Par Zenol dans le forum Flash
    Réponses: 12
    Dernier message: 20/11/2005, 01h44
  2. [StringGrid]Alignement des Cellules
    Par touhami dans le forum Composants VCL
    Réponses: 3
    Dernier message: 06/11/2005, 19h38
  3. [Tableaux] Alignement des champs d'un formulaire
    Par jack554 dans le forum Langage
    Réponses: 7
    Dernier message: 15/09/2005, 15h30
  4. Comment aligner des éléments d'un TEdit à droite ?
    Par bertrand_declerck dans le forum Composants VCL
    Réponses: 18
    Dernier message: 15/06/2005, 17h46
  5. Réponses: 3
    Dernier message: 26/01/2005, 15h21

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