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 :

Problème avec GridLayout


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 72
    Par défaut Problème avec GridLayout
    Bonjour,

    J'ai 14 champs textes à afficher dans un panel selon un nombre choisi par l'utilisteur.
    J'ai défini pour celà un panel avec un GridLayout(7,2). Mon problème c'est que lorsque l'utilisateur choisi un nombre <=7 c'est uniquement une seule colonne qui est remplie et les champs texte occupent toute la largeur du panel
    Comment faire pour obtenir une présentation toujours su deux colonnes indépendemment du nombre de champs à afficher?

    Merci

  2. #2
    Membre émérite 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
    Par défaut
    J'ai 14 champs textes à afficher dans un panel selon un nombre choisi par l'utilisteur.
    tu en as 14 ou bien c'est l'utilisateur qui décide du nombre ??

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 72
    Par défaut
    Le maximum qui peut être affiché est 14. Donc j'ai prévu un panel qui pourrait accueillir 14 champs. Aprés l'utilisateur choisira un nombre entre 0 et 14.

  4. #4
    Membre émérite 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
    Par défaut
    pourquoi ne pas ajuster ton panel a la demande de l utilisateur ?

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 72
    Par défaut
    C'est ce que je souhaiterais faire
    En fait je voudrais obtenir une bonne présentation indépendemment du nombre de champs à afficher, voilà tout.

    Aurais tu une idée à me proposer?

  6. #6
    Membre émérite 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
    Par défaut
    oui par exemple tu récupère le nombre de Labels a afficher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    itn nbLabels = ... ;
    setLayout(new GridLayout(1+nbLabels/2, 2));
    dis moi si ça te convient

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 72
    Par défaut
    C'est presque la solution que je souhaite obtenir sauf que je voudrais pas que la taille de mes champs texte change. Avec cette solution, moins il y a de champs affichés plus la hauteur des champs est grande.
    Alors?

  8. #8
    Membre émérite 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
    Par défaut
    je vois le pb, peut être que le grid Layout n'est pas le plus adapté à la situation... peut être un gridBagLayout mais ça te fais sortir l'artillerie lourde pour pas grand chose. A moins que tu le connaisse déjà ?

  9. #9
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 72
    Par défaut
    Non, j'ai jamais utilisé GriBagLayout

  10. #10
    Membre émérite 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
    Par défaut
    bon je suis dans un bon jour, je vais te faciliter la tâche...
    ajoute les 2 fichiers joint à ton projet et crée ton panel comme ceci ça devrait marcher :

    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
     
     
    TON_PANEL = new JPanel(new GridBagLayout());
     
    int nbLignes = 1 + nbrDonneParUtilisateur ;
     
    //Créer les inserts (insets)
    Insets basicInsets = new Insets(2,2,2,2);
     
    //  Créer les styles de cellule
    CellStyle normalStyle = new CellStyle(1.0, 0.0,
    		GridBagConstraints.LINE_START, GridBagConstraints.HORIZONTAL,
    		basicInsets, 0, 0);
    CellStyle endLineStyle = new CellStyle(1.0, 1.0,
    		GridBagConstraints.FIRST_LINE_START, GridBagConstraints.HORIZONTAL, basicInsets,
    		0, 0);
     
    //  Ajouter les composants
    XGridBag g = new XGridBag(TON_PANEL);
     
    for(int i = 0; i< nbLignes ; i++){
    	if( ligneEnCours == (nbLignes-1)){
    		g.add(TON_LABEL, endLineStyle, i, 0);
    		g.add(TON_LABEL, endLineStyle, i, 1);
    	}
    	else{
    		g.add(TON_LABEL,normalStyle , i, 0);
    		g.add(TON_LABEL, normalStyle, i, 1);
    	}
    }
    tiens moi au courant si tu ne comprend pas qq chose
    Fichiers attachés Fichiers attachés

  11. #11
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 72
    Par défaut
    Is there a solution a little bit simple I'm new to java

  12. #12
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 72
    Par défaut
    Pardon j'ai eu le réflexe de rédiger mes messages en anglais!
    Je voulais juste te demander s'il n'y avait pas une solution plus simple car je suis nouveau dans le monde java et je travaille actuellement sur un gros projet et je devrais limiter l'ajout de code.

    Merci

  13. #13
    Membre émérite 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
    Par défaut
    heuu moi en tous cas je ne vois pas ... peut être quelqu un en aura une
    sinon tu l as testé ?

  14. #14
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Salut, je suis récemment tombé sur la même problématique.
    Avec ce que j'ai fait, quelque soit le nombre de composants à afficher, il y en aura 2 par ligne, si le nombre est impair le dernier est tout seul évidemment.
    En gros, c'est une succession verticale de JPanels contenant chacun 2 éléments.
    Il y a une gestion des marges horizontales et verticales.

    Ca donne quelque chose comme ça :
    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
    public class TonPanel extends JPanel {
        private static final int NUMBER_OF_RESOURCES_PER_LINE = 2;
        private static final int MARGIN_Y = 5;
        private static final int MARGIN_X = 50;
     
        public void createComponents() {
            Box verticalBox = Box.createVerticalBox();
            JPanel horizontalPanel = new JPanel();
            int count = 0;
            boolean lastElementMissing = true;
     
            int nbLabels = 10; // TO BE DEFINED
            JLabel[] tabJLabel = new JLabel[nbLabels];
            for (int i=0 ; i < tabJLabel.length ; i++) {
                if(count == 0) {
                    // we put only 2 resources on the same line
                    horizontalPanel = new JPanel();
                    horizontalPanel.setLayout(new GridLayout(1, NUMBER_OF_RESOURCES_PER_LINE, MARGIN_Y, 0));
                }
                lastElementMissing = true;
                JLabel label = new JLabel();
                label.setBorder(BorderFactory.createEmptyBorder());
     
                horizontalPanel.add(label);
                tabJLabel[i] = label;
                count++;
                if(count == NUMBER_OF_RESOURCES_PER_LINE) {
                    count = 0;
                    verticalBox.add(horizontalPanel);
                    verticalBox.add(Box.createVerticalStrut(MARGIN_X));
     
                    lastElementMissing = false;
                }
            }
            if(lastElementMissing) {
                verticalBox.add(horizontalPanel);
            }
            add(verticalBox);
        }
    }

  15. #15
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 72
    Par défaut
    OK Merci pour vos réponses. Je testerais et je vous tiendrais au courant

  16. #16
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 72
    Par défaut
    Bonjour,

    En fin de comptes j'ai réussi à utiliser le gridbaglayout et l'affichage est comme souhaité sauf qu'il y a un truc bizarre
    Quand je saisi du champ texte dans un textfield, la largeur de ce dernier grandit selon la longueur duy texte saisie. Le problème c'est qu'il n'y a plus d'espace, le textfield reprend une toute petite largeur de sorte qu'on ne voit plus le texte qu'on a saisi...
    Désolé si j'arrive pas à être clair mais je trouve ce comportement trés bizarre!!!

    Ders idées?

  17. #17
    Membre émérite 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
    Par défaut
    tu as utilisé ma solution ?
    si c'est le cas, ce comportement est normal , change :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //  Créer les styles de cellule
    CellStyle normalStyle = new CellStyle(1.0, 0.0,
    		GridBagConstraints.LINE_START, GridBagConstraints.HORIZONTAL,
    		basicInsets, 0, 0);
    CellStyle endLineStyle = new CellStyle(1.0, 1.0,
    		GridBagConstraints.FIRST_LINE_START, GridBagConstraints.HORIZONTAL, basicInsets,
    		0, 0);
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //  Créer les styles de cellule
    CellStyle normalStyle = new CellStyle(1.0, 0.0,
    		GridBagConstraints.LINE_START, GridBagConstraints.NONE,
    		basicInsets, 0, 0);
    CellStyle endLineStyle = new CellStyle(1.0, 1.0,
    		GridBagConstraints.FIRST_LINE_START, GridBagConstraints.NONE, basicInsets,
    		0, 0);

  18. #18
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 72
    Par défaut
    En fait je me suis inspiré de la solution que tu as proposé pour l'adapter à mon besoin.
    Voilà ce que j'ai mis comme code:
    CustomFieldPanel.this.add(new SameWidthDecorator(0,customFieldPanel),new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));

    Avec customFieldPanel le panel qui contient le champ texte.

    Aurais je oublié de faire quelque chose?

  19. #19
    Membre émérite 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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CustomFieldPanel.this.add(new SameWidthDecorator(0,customFieldPanel),new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
    les 2 nombre en gras définissent le poids du composant, ils correspondent au poids selon x et selon y respectivement. As tuessayé en mettant 1.0 et 0.0 comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CustomFieldPanel.this.add(new SameWidthDecorator(0,customFieldPanel),new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));

  20. #20
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 72
    Par défaut
    J'ai essayé comme tu l'as indiqué et c'est toujours le même problème.
    Peut être que ceci te donnera encore des idées:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     GridBagLayout gbl = new GridBagLayout();
        gbl.rowWeights = new double [] {0.1,0.1,0.1,0.1,0.1,0.1,0.1};
        gbl.columnWeights = new double [] {0.1,0.1};
        gbl.rowHeights = new int[] {0,0,0,0,0,0,0};
        gbl.columnWidths = new int[] {0,0};
        CustomFieldPanel.this.setLayout(gbl);

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Création Grille avec gridLayout --> Problème de rafraichissement ?
    Par july4474 dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 10/03/2010, 17h41
  2. problème avec GridLayout
    Par *alexandre* dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 16/04/2008, 13h52
  3. Problème avec le GridLayout
    Par mister3957 dans le forum Agents de placement/Fenêtres
    Réponses: 7
    Dernier message: 01/08/2005, 17h59
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 17h10

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