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 :

Layout horizontal et vertical alignement


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 54
    Points
    54
    Par défaut Layout horizontal et vertical alignement
    Salut à tous,

    je voudrai créer un panel à l'intérieur duquel j'aurai 2 labels l'un à côté de l'autre.

    Je voudrai que ces 2 labels soient toujours aligner au centre verticalement mais je voudrai avoir un contrôle sur l'alignement horizontal des 2 labels : Gauche, Centre et Droite.

    J'ai d'abord essayé avec un FlowLayout :

    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
     
                    JPanel panel = new JPanel();
    		FlowLayout flowLayout = new FlowLayout();
     
    		if (serial.getAlignement() == Vertex.LEFT){
    			flowLayout.setAlignment(FlowLayout.LEFT);
    		}
    		else if (serial.getAlignement() == Vertex.CENTER){
    			flowLayout.setAlignment(FlowLayout.CENTER);
    		}
    		else if (serial.getAlignement() == Vertex.RIGHT){
    			flowLayout.setAlignment(FlowLayout.RIGHT);
    		}
     
    		flowLayout.setVgap(2);
    		panel.setLayout(flowLayout);
     
    		JLabel serialNumberPrefixe = new JLabel();
    		serialNumberPrefixe.setText("toto");
     
    		JLabel serialNumberValue = new JLabel();
    		serialNumberValue.setText("tata");
     
                    panel.add(serialNumberPrefixe);
    		panel.add(serialNumberValue);
     
    		panel.setVisible(true);
    Ceci me permettait d'avoir un contrôle sur l'alignement horizontal de mes 2 labels mais malheureusement je ne pouvais pas spécifier ma volonté de les laisser centrer au niveau de l'alignement vertical.

    J'ai donc voulu essayer avec le GridBagLayout :

    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
     
                           GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
     
    			gridBagConstraints2.gridy = 0;
    			gridBagConstraints2.gridx = 1;
     
    			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
     
    			gridBagConstraints1.gridy = 0;
    			gridBagConstraints1.gridx = 0;
     
     
    			jLabel1 = new JLabel();
    			jLabel1.setText("toto");
    			jLabel1.setName("jLabel1");
    			jLabel = new JLabel();
    			jLabel.setText("tata");
    			jLabel.setName("jLabel");
    			jPanel = new JPanel();
    			jPanel.setLocation(new Point(31, 22));
    			jPanel.setSize(new Dimension(209, 64));
    			jPanel.setLayout(new GridBagLayout());
    			jPanel.setComponentOrientation(ComponentOrientation.UNKNOWN);
     
    			jPanel.add(jLabel, gridBagConstraints1);
    			jPanel.add(jLabel1, gridBagConstraints2);
    Ceci me permet de conserver mes 2 labels centrés verticalement même en cas de redimensionnement du panel malheureusement je n'ai aucun contrôle sur le positionnement horizontal de mes 2 labels (du moins je ne vois pas comment faire).

    Quelqu'un peu-t-il m'aider ?

    Si vous avez une autre solution n'hésitez pas.

    Merci.

  2. #2
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    Pour le grid bag layout tu dois utiliser la propriété anchor , voici un tuto ici :
    GridBagLayout

    Cette propriété définit la position du composant dans une cellule (haut, haut gauche, etc...)

    je pense que c est ce que tu cherche
    Heureux soient les fêlés, car ils laisseront passer la lumière.

    Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  3. #3
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 54
    Points
    54
    Par défaut
    Oui j'ai testé avec ça mais sans succès, je ne l'ai peut être pas utilisé correctement, je vais jeter un nouveau coup d'oeil.

    Merci pour ta réponse en tout cas.

  4. #4
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 54
    Points
    54
    Par défaut
    J'ai beau changé le anchor pour le mettre sur East pour le premier label, les deux restent centrés horizontalement :

    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
     
    GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
     
    			gridBagConstraints2.gridy = 0;
    			gridBagConstraints2.gridx = 1;
     
    			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
     
    			gridBagConstraints1.gridy = 0;
    			gridBagConstraints1.anchor = GridBagConstraints.EAST;
    			gridBagConstraints1.gridx = 0;
     
     
    			jLabel1 = new JLabel();
    			jLabel1.setText("toto");
    			jLabel1.setName("jLabel1");
    			jLabel = new JLabel();
    			jLabel.setText("tata");
    			jLabel.setName("jLabel");
    			jPanel = new JPanel();
    			jPanel.setLocation(new Point(31, 22));
    			jPanel.setSize(new Dimension(209, 64));
    			jPanel.setLayout(new GridBagLayout());
     
     
    			jPanel.add(jLabel, gridBagConstraints1);
    			jPanel.add(jLabel1, gridBagConstraints2);

  5. #5
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    très important aussi les ptés weightx et weighty, elles définissent la façon dont l'espace en trop sur une ligne/colonne sera réparti entre les cellules.
    Heureux soient les fêlés, car ils laisseront passer la lumière.

    Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  6. #6
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 54
    Points
    54
    Par défaut
    Oui mais dans mon cas je pense pas avoir besoin de gérer l'espace entre mes composants, j'aurai pu en avoir besoin si j'avais voulu créer un écart entre les 2 labels, mais c'est pas le cas, je veux qu'ils restent collés l'un à l'autre.

  7. #7
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    peut on avoir une copie écran de ce que tu obtiens ?
    Heureux soient les fêlés, car ils laisseront passer la lumière.

    Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  8. #8
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par jojodu31 Voir le message
    peut on avoir une copie écran de ce que tu obtiens ?
    Avec grand plaisir voilà :
    Images attachées Images attachées   

  9. #9
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Ne serait-ce pas ce que tu cherche ?
    Choisi l'une des 3 méthodes privé dans le main.

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
    public class Test {
     
    	public static void main(String[] args) {
    		// au choix :
    		// setLeft();
    		// setCenter();
    		// setRight();
    	}
     
    	private static void setRight() {
    		JFrame f = new JFrame();
    		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		JLabel l1 = new JLabel("label 1");
    		JLabel l2 = new JLabel("label 2");
     
    		JPanel p = new JPanel(new GridBagLayout());
     
    		GridBagConstraints gbc = new GridBagConstraints();
    		gbc.anchor = GridBagConstraints.LAST_LINE_END;
    		gbc.weightx = 1.0;
     
    		gbc.gridx = 0;
    		gbc.gridy = 0;
     
    		p.add(l1, gbc);
     
    		gbc.gridx = 0;
    		gbc.gridy = 1;
     
    		p.add(l2, gbc);
     
    		f.add(p);
     
    		f.pack();
    		f.setVisible(true);
    	}
     
    	private static void setLeft() {
    		JFrame f = new JFrame();
    		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		JLabel l1 = new JLabel("label 1");
    		JLabel l2 = new JLabel("label 2");
     
    		JPanel p = new JPanel(new GridBagLayout());
     
    		GridBagConstraints gbc = new GridBagConstraints();
    		gbc.anchor = GridBagConstraints.FIRST_LINE_START;
    		gbc.weightx = 1.0;
     
    		gbc.gridx = 0;
    		gbc.gridy = 0;
     
    		p.add(l1, gbc);
     
    		gbc.gridx = 0;
    		gbc.gridy = 1;
     
    		p.add(l2, gbc);
     
    		f.add(p);
     
    		f.pack();
    		f.setVisible(true);
    	}
     
    	private static void setCenter() {
    		JFrame f = new JFrame();
    		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		JLabel l1 = new JLabel("label 1");
    		JLabel l2 = new JLabel("label 2");
     
    		JPanel p = new JPanel(new GridBagLayout());
     
    		GridBagConstraints gbc = new GridBagConstraints();
     
    		gbc.gridx = 0;
    		gbc.gridy = 0;
     
    		p.add(l1, gbc);
     
    		gbc.gridx = 0;
    		gbc.gridy = 1;
     
    		p.add(l2, gbc);
     
    		f.add(p);
     
    		f.pack();
    		f.setVisible(true);
    	}
    }

  10. #10
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Points : 54
    Points
    54
    Par défaut
    Merci visiwi ta solution fonctionne "presque" à la perfection !
    En fait le seul petit détail était que les 2 label étaient superposés avec ton code alors que moi il fallait absolument qu'ils soient alignés. Pour résoudre ce dernier petit détail j'ai donc placé les 2 label dans un Panel en FlowLayout et j'ai appliqué le GridBagConstraints de ton code sur ce panel.

    Voici mon 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
     
                    JPanel panel1 = new JPanel();
    	        FlowLayout flowLayout = new FlowLayout();
    		flowLayout.setVgap(2);
    		panel1.setLayout(flowLayout);
     
    		JLabel serialNumberPrefixe = new JLabel(prefixe);
    		JLabel serialNumberValue = new JLabel(cell.toString());
     
                    panel1.add(serialNumberPrefixe);
    		panel1.add(serialNumberValue);
    		panel1.setOpaque(false);
     
    		JPanel panel = new JPanel(new GridBagLayout());
     
    		GridBagConstraints gbc = new GridBagConstraints();
     
                    //ceci fait appel à une autre classe qui me permet de savoir de quel alignement j'ai besoin
    		if (serial.getAlignement() == Vertex.LEFT){
    			gbc.anchor = GridBagConstraints.FIRST_LINE_START;
    		}
    		else if (serial.getAlignement() == Vertex.RIGHT){
    			gbc.anchor = GridBagConstraints.LAST_LINE_END;
    		}
     
    		gbc.weightx = 1.0;
     
    		gbc.gridx = 0;
    		gbc.gridy = 0;
     
    		panel.add(panel1, gbc);
    		panel.setVisible(true);
    Encore merci à toi visiwi tu m'as enlevé une sacrée épine du pied car j'avais du mal à comprendre le fonctionnement du GridBagLayout.

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

Discussions similaires

  1. Colonne horizontal vers vertical
    Par rvzip64 dans le forum Requêtes
    Réponses: 10
    Dernier message: 21/08/2006, 08h45
  2. [DIV] vertical align
    Par crakocrako dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 06/07/2006, 14h47
  3. CSS: vertical-align:middle;
    Par pierrot10 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 01/12/2005, 00h40
  4. [FO] vertical-align ?
    Par DanDigiMan dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 12/09/2004, 14h48

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