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 alignement cellule et GridBagLayout


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 21
    Par défaut Problème alignement cellule et GridBagLayout
    Bonjour,

    Tout d'abord, je suis en train de coder un JPanel avec un GridBagLayout.
    j'ai un problème avec la propriété
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gridwidth = GridBagConstraints.REMAINDER
    En effet, voici le rendu que je désire et que j'arrive à obtenir en laissant la valeur par défaut de gridwidth :


    Le tableau représente la grille virtuelle du layout, elle est juste représentée à titre indicatif.

    Par contre, dès que j'assigne l'autre valeur à la propriété des JLabel "Add SlowControl" et "Informations", le rendu n'est plus du tout le même.
    Voyez par vous même :


    Apparemment, cela semble écraser les cellules vides et donc je perds l'indentation des deux JLabel que je recherche. Les deux labels en question sont lblAdd et lblInfoAdd.

    Voici mon code également (désolé il est un peu long) :
    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
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    public class SlowControl extends JPanel {
     
        // Declare GridBagLayout constraints
        GridBagConstraints gbc = new GridBagConstraints();
        private Data data;
        // Add SlowControl
        private JTextField txtNameAdd = new JTextField();
        private JTextField txtPathAdd = new JTextField();
        private JFormattedTextField txtDateAcqAdd = new JFormattedTextField(" YYYY-MM-DD HH:MM:SS ");
     
        private JLabel lblAdd = new JLabel("Add SlowControl :");
        private JLabel lblInfoAdd = new JLabel("Informations :");
        private JLabel lblPathAdd = new JLabel("Path :");
        private JLabel lblRunNameAdd = new JLabel("Run name :");
        private JLabel lblDateAcqAdd = new JLabel("Date acq :");
        private JLabel lblNameAdd = new JLabel("Name :");
     
        private JComboBox cmbRunNameAdd;
        private JComboBox cmbRunNameSearch;
        private JComboBox cmbNameSearch;
     
        private JButton butAdd = new JButton("Add");
        private JButton butSearch = new JButton("Search");
        private JButton butInfo = new JButton("Read Informations");
        private JButton butModify = new JButton("Modify");
        private JButton butDelete = new JButton("Delete");
     
        private JSeparator sepAdd = new JSeparator(SwingConstants.VERTICAL);
        private JSeparator sepBoth = new JSeparator(SwingConstants.HORIZONTAL);
     
     
     
     
        /**
         * Create a JPanel which contains all SlowControl tab's components.
         */
        public SlowControl() {
            super();
     
            this.setBackground(Color.WHITE);
            this.setLayout(new GridBagLayout());
            // add a line border to the JPanel
            this.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY));
     
            initAdd();
     
            this.txtPathAdd.setText("Gros test !");
     
        }
     
        /**
         * Creates the slowControl's add unit.
         */
        private void initAdd() {
            // filling up comboBox with data from database
            this.data = new Data("run_name", "RUN");
            ArrayList result = this.data.selectFieldData();
            this.cmbRunNameAdd = new JComboBox(this.data.arrayListToString(result));        
     
            // 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());
            this.butAdd.setPreferredSize(this.butInfo.getPreferredSize());
            this.butAdd.setMinimumSize(new Dimension (80, 30));
     
            // 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);
        }
     
     
    }
    J'ai voulu mettre une coloration sur les champs importants pour se repérer plus facilement mais ça enlevait la coloration syntaxique donc je l'ai enlevé.

    Merci d'avance à ceux qui prendront le temps de se pencher sur mon cas

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Le problème vient du fait que tu utilise REMAINDER pour le gridwidth de tes deux premiers composants. De fait si tu remplace cette valeur par 1 tu obtiendras le résultat attendu.

  3. #3
    Membre averti
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 21
    Par défaut
    Merci d'avoir répondu. Désolé je viens de remarquer que je m'étais mal exprimé dans mon post En fait, je sais d'où vient l'erreur mais je comprenais pas pourquoi REMAINDER donne ce résultat. Dans la plupart des tuto, il est marqué qu'on met gridwidth = ...REMAINDER quand l'élément est le dernier de sa ligne. Or c'est le cas, donc je ne vois pas pourquoi ça donne ça ... Ou je pense que je n'ai pas très bien saisi l'utilité de REMAINDER.
    Si tu as une idée, hésites pas à m'éclairer de ta lanterne

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    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.

  5. #5
    Membre averti
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 21
    Par défaut
    Merci
    Mais j'ai toujours un peu de mal avec :
    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.
    Je vois pas pourquoi ce sont les deux dernières qui s'étendent sachant que toutes les colonnes à part les deux premières ont des composants avec un gridwidth de 1.

    De plus, si gridwidth = ...REMAINDER permet à la colonne de s'étendre, elle ne récupère que l'espace qui suit (donc ici les 4 dernières colonnes pour lblInfoAdd) ou elle prend également l'espace qui précède si celui est vide ?

    Cdlt,

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Je disait 2 dernières mais je pensait 4 dernières en fait. En effet ce sont colonnes qui ont un besoin impératif d'espace minimum. De fait le GridBag ne se prive pas de mettre les colonnes non essentielles ) de largeur.

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

Discussions similaires

  1. Problème alignement dans cellule sous IE
    Par mauriceuh dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/02/2007, 14h08
  2. [CSS] problème alignement DIV
    Par luta dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 12/06/2006, 18h22
  3. Problème alignement image par rapport au texte
    Par finalfx dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 23/05/2006, 09h12
  4. Problème alignement avec trois div
    Par finalfx dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 20/05/2006, 19h48
  5. [VBA-A]Problème de cellule Excel vide
    Par soad029 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 05/05/2006, 15h12

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