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 :

Positionnement d'un JLabel dans une Box


Sujet :

AWT/Swing Java

  1. #1
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut Positionnement d'un JLabel dans une Box
    Bonjour,

    J'ai un soucis de positionnement d'un JLabel dans un Box horizontal. Voici le code de création :
    Code java : 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
     
    Box vbox = Box.createVerticalBox();
    vbox.add(Box.createVerticalStrut(10));
     
    Box hbox = Box.createHorizontalBox();
    JLabel xmlName = new JLabel("Test");
    hbox.add(Box.createHorizontalStrut(5));
    hbox.add(xmlName);
    vbox.add(hbox);
     hbox = Box.createHorizontalBox();
     
    JTextField xmlName2 = new JTextField("Test" + i);
    hbox.add(Box.createHorizontalStrut(5));
    hbox.add(xmlName2);
    hbox.add(Box.createHorizontalStrut(5));
     
    vbox.add(hbox);
    J'ai essayé de faire un setAlignmentX mais mon JTextField et mon JLabel ne sont pas alignés.

    Vous avez une idée pour résoudre ce soucis ?

  2. #2
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Pourquoi utiliser une Box pour chaque composant ?

    Je n'ai jamais utilisé les Box, alors j'ai fais un petit tour sur la FAQ,
    et il me semble que tu te compliques la vie .

    Quelque chose comme ça te suffirait ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Box vbox = Box.createVerticalBox();
    vbox.add(Box.createVerticalStrut(10));
    JLabel xmlName = new JLabel("Test");
    vbox.add(xmlName);
    JTextField xmlName2 = new JTextField("Test" + i);
    vbox.add(xmlName2);
    Libre à toi ensuite de régler les VerticalStrut comme tu veux.

    Bonne chance.

  3. #3
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    Ton code fonctionne mais pour ce qui est de l'espacement entre le bord du JFrame et des JTextField n'est pas énorme.

    SInon j'ai toujours le même soucis de positionnement du JLabel

  4. #4
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Pour l'espacement, tu peux utiliser un border comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tonContentPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
    // Les paramètres sont les dimensions de l'espacement
    Pour l'alignement, aurais tu un screen shot pour que je visualise mieux ton problème ? Merci

  5. #5
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    Effectivement cette ligne fonctionne correctement

    Sinon j'ai un soucis de redimensionnement du JTextField et même avec un setSize il en veut pas.

    Pour l'alignement, voici la capture d'écran.

  6. #6
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Dans ton cas, le BoxLayout n'est peut être pas la solution adapté, bien que je ne pense pas qu'un layout soit plus adapté qu'un autre. Seulement, si tu as un problème avec BoxLayout et que tu n'as pas d'impératif, autant en choisir un autre. GridBagLayout est le plus riche et le plus précis, mais en contre partie, il est plus difficile à utiliser. Mais avec une bonne pratique, tu gagneras en liberté de placement et en fonctionnalité sans trop de difficulté.

    Va voir dans la FAQ pour plus d'explication sur GridBagLayout.

    Bonne chance.

  7. #7
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    En fait c'était ma solution de départ. Et le seul soucis que j'ai avec le GridBagLayout c'est que le contenu est toujours centré dans ma fenêtre, alors que qu'avec les autres il est toujours en NORTH.

    Et malgré tout ce que j'ai tenté il reste toujours au centre de la fenêtre

  8. #8
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Peux tu me montrer ton code avec GridBagLayout ? On doit pouvoir arranger ça

  9. #9
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    JPanel panelXMLChooser = new JPanel();
    panelXMLChooser.setLayout(new GridBagLayout());
     
    xmlName = new JLabel();                                    
    xmlName.setBorder(BorderFactory.createLineBorder(new Color(122, 138, 153), 1) );
     
    GridBagConstraints c1 = new GridBagConstraints();
    c1.gridx = 0;
    c1.gridy = 1;
    c1.weightx = 250;
    c1.insets = new Insets(0, 3, 8, 1);
    c1.fill = GridBagConstraints.BOTH;
    panelXMLChooser.add(xmlName, c1);
    Voici un petit exemple d'un panel que je mets dans ma fenêtre en CENTER, et je retrouve toujours le contenu au centre du panel. Si j'en rajoute alors là le contenu se déplace vers le haut mais sinon rien

  10. #10
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    C'est normal, le positionnement des éléments avec un GridBagLayout est relatif aux autres éléments présents. Pour avoir une vision plus précise regarde par ici.

    En fait, je remarque que tu ne spécifies pas la variable anchor de ton GridBagConstraints, or elle est utilisée pour le placement des composants, et sa valeur par défaut est... CENTER bien sur. Regarde le lien que je t'ai donné, tu auras les différentes valeurs de anchor. Bonne chance et n'hésites pas à demander plus d'explication

  11. #11
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    J'ai bien testé avec le anchor mais je retombe toujours sur le même résultat. Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    JLabel xmlName = new JLabel("Test" + i);
     
    c1.gridx = 0;
    c1.gridy = i;
    c1.weightx = 1.0;
    c1.weighty = 0;
    c1.insets = new Insets(0, 0, 0, 0);
    c1.anchor = GridBagConstraints.FIRST_LINE_START;
    c1.fill = GridBagConstraints.HORIZONTAL;
    contenue.add(xmlName, c1);
    Sinon avec les Box, j'ai trouvé un moyen pour redimensionner les TextField et les Label. En fait je redéfinie la taille maximale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xmlName.setPreferredSize(new Dimension(450, 10));
    xmlName.setMaximumSize(xmlName.getPreferredSize());

  12. #12
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Pourrais je avoir un screen du résultat avec GridBagLayout s'il te plait ?

    La solution avec BoxLayout règle t-elle ton problème, es-tu satisfait du résultat ou c'est pas encore ça ?

    Merci.

  13. #13
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    Alors voici pour le GridBagLayout (la première pièce jointe). Pour le test j'ai mis juste le nécessaire pour montrer que la disposition n'est pas celle attendue.

    La deuxième pièce jointe c'est avec la Box. Et c'est exactement ce que je voulais obtenir au tout début lorsque j'utilisais le GridBagLayout.

  14. #14
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Bon alors ton problème est résolu . Veux-tu absolument utiliser GridBagLayout ou cette solution te convient elle ? Car sinon, je cherche un moyen pour dompter ce satané GridBagLayout

  15. #15
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    Te casse pas la tête, je me la suis déjà cassé

    J'adopte la technique avec la Box, et ce sera parfait. J'uniformiserai pour les autres interfaces, car je redimensionnais la JFrame pour éviter le centrage

    Merci pour ton aide

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

Discussions similaires

  1. [JLabel]dans une boucle for
    Par scolopendra dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 20/07/2007, 14h19
  2. Linux dans une box
    Par eponyme dans le forum Matériel
    Réponses: 6
    Dernier message: 22/03/2007, 12h58
  3. Affichage d'un JLabel dans une popup (JFrame)
    Par mattyeux dans le forum Agents de placement/Fenêtres
    Réponses: 17
    Dernier message: 05/02/2007, 15h17
  4. Evenements sur des JLabel dans une JList
    Par Tibo dans le forum Composants
    Réponses: 6
    Dernier message: 30/06/2006, 11h06
  5. Positionner précisement plusieurs JPanel dans une JFrame.
    Par RadicalBob dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 13/06/2006, 22h42

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