Java : problème disposition GridBagLayout

Résolu/Fermé
Nargonath Messages postés 4 Date d'inscription mercredi 21 avril 2010 Statut Membre Dernière intervention 27 avril 2010 - Modifié par Nargonath le 21/04/2010 à 08:45
Nargonath Messages postés 4 Date d'inscription mercredi 21 avril 2010 Statut Membre Dernière intervention 27 avril 2010 - 21 avril 2010 à 16:52
Bonjour,

Tout d'abord, je suis en train de développer des JPanels avec un GridBagLayout. Je rencontre un problème au niveau de la disposition de mes cellules. J'ai compilé mon code étape par étape, et le problème provient de l'instruction que j'attribue à deux JLabels :
gridwidth = GridBagConstraints.REMAINDER;

En effet, voici le résultat que je désire et que j'obtiens en laissant la propriété à sa valeur par défaut :
http://uppix.net/7/5/0/ee8fd1a504f7664aea37e809b7987.jpg
Les traits de tableaux correspondent à la représentation de la grille virtuelle du GridBagLayout, ils sont juste là à titre représentatif.

Et voici ce que j'obtiens en passant la propriété des deux JLabels ( "Add SlowControl" et "Informations" ) à GridBagConstraints.REMAINDER :
http://uppix.net/7/c/e/b87c6ba383ac17992ec02d4e2bc51.jpg

Je ne comprends pas pourquoi le fait de mettre cette valeur à la propriété écrase les cellules vides et donc me fait perdre l'indentation des JLabels recherchée. Si quelqu'un à une réponse à mon problème je suis tout ouï ! :D

Voici le code qui correspond à mon problème (les deux JLables en question sont lblAdd et lblInfoAdd) :

// set preffered size and minimum size for all txt and but component 
        this.cmbRunNameAdd.setPreferredSize(cmbRunNameAdd.getPreferredSize()); 
        this.cmbRunNameAdd.setMinimumSize(new Dimension(100, 20)); 
        this.txtDateAcqAdd.setPreferredSize(this.cmbRunNameAdd.getPreferredSize()); 
        this.txtDateAcqAdd.setMinimumSize(this.cmbRunNameAdd.getMinimumSize()); 
        this.txtNameAdd.setPreferredSize(this.cmbRunNameAdd.getPreferredSize()); 
        this.txtNameAdd.setMinimumSize(this.cmbRunNameAdd.getMinimumSize()); 
        this.txtPathAdd.setPreferredSize(this.cmbRunNameAdd.getPreferredSize()); 
        this.txtPathAdd.setMinimumSize(this.cmbRunNameAdd.getMinimumSize()); 

        // set constraints for lblAdd 
        constraints(this.lblAdd, 0, 0, GridBagConstraints.REMAINDER, 1, GridBagConstraints.NONE, 
                new Insets(10,15,0,0), GridBagConstraints.LINE_START, 0, 0); 

        // set constraints for lblInfoAdd 
        constraints(this.lblInfoAdd, 1, 1, GridBagConstraints.REMAINDER, 1, GridBagConstraints.NONE, 
                new Insets(10,15,0,0), GridBagConstraints.LINE_START, 0, 0); 

        // set constraints for lblNameAdd 
        constraints(this.lblNameAdd, 2, 2, 1, 1, GridBagConstraints.NONE, new Insets(10,15,0,0), 
                GridBagConstraints.LINE_START, 0, 0); 

        // set constraints for txtNameAdd 
        // we use the GridBagContraints.RELATIVE property to set gridx. It means that gridx take 
        // care about the previous gridx element position. It will be incremented. 
        constraints(this.txtNameAdd, GridBagConstraints.RELATIVE, 2, 1, 1, 
                GridBagConstraints.HORIZONTAL, new Insets(10,5,0,0), GridBagConstraints.BASELINE, 
                0, 0); 

        // set constraints for lblPathAdd 
        // we have to disable the fill option 
        constraints(this.lblPathAdd, GridBagConstraints.RELATIVE, 2, 1, 1, 
                GridBagConstraints.NONE, new Insets(10,10,0,0), GridBagConstraints.BASELINE_LEADING, 
                0, 0); 

        // set constraints for txtPathAdd 
        constraints(this.txtPathAdd, GridBagConstraints.RELATIVE, 2, 1, 1, 
                GridBagConstraints.HORIZONTAL, new Insets(10,5,0,0), GridBagConstraints.BASELINE, 
                0, 0); 

        // set constraints for lblRunNameAdd 
        constraints(this.lblRunNameAdd, 2, 3, 1, 1, 
                GridBagConstraints.NONE, new Insets(10,15,0,0), GridBagConstraints.BASELINE_LEADING, 
                0, 0); 

        // set constraints for cmbRunNameAdd 
        constraints(this.cmbRunNameAdd, GridBagConstraints.RELATIVE, 3, 1, 1, 
                GridBagConstraints.HORIZONTAL, new Insets(10,5,0,0), GridBagConstraints.BASELINE, 
                0, 0); 

        // set constraints for lblDateAcqAdd 
        constraints(this.lblDateAcqAdd, GridBagConstraints.RELATIVE, 3, 1, 1, 
                GridBagConstraints.NONE, new Insets(10,10,0,0), GridBagConstraints.BASELINE_LEADING, 
                0, 0); 

        // set constraints for txtDateAcqAdd 
        constraints(this.txtDateAcqAdd, GridBagConstraints.RELATIVE, 3, 1, 1, 
                GridBagConstraints.HORIZONTAL, new Insets(10,5,0,0), GridBagConstraints.BASELINE, 
                0, 0); 
         
    } 

    /** 
     * Add a component to the GridBagLayout with all constraints given into parameters 
     * @param object 
     * @param gridx 
     * @param gridy 
     * @param gridwidth 
     * @param gridheight 
     * @param fill 
     * @param insets 
     * @param anchor 
     * @param weightx 
     * @param weighty 
     */ 
    private void constraints(Component object, int gridx, int gridy, 
            int gridwidth, int gridheight, int fill, Insets insets, int anchor, double weightx, 
            double weighty) { 

        gbc.gridx = gridx; 
        gbc.gridy = gridy; 
        gbc.gridwidth = gridwidth; 
        gbc.gridheight = gridheight; 
        gbc.fill = fill; 
        gbc.insets = insets; 
        gbc.anchor = anchor; 
        gbc.weightx = weightx; 
        gbc.weighty = weighty; 

        this.add(object, gbc); 
    }




A voir également:

1 réponse

Nargonath Messages postés 4 Date d'inscription mercredi 21 avril 2010 Statut Membre Dernière intervention 27 avril 2010
21 avril 2010 à 16:52
Remaider est calculé pour prendre tout l'espace restant sur la ligne. Donc si ta ligne fait trois colonnes et si tu places ton composant en première colonne avec un gridwidth en REMAINDER, ton composant aura à disposition les trois colonnes. De fait le GridBag choisit d'étendre au max les colonnes contenant des composants qui ont un gridwidth de 1, c'est à dire les deux dernières dans ton cas.
0