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 :

Chevauchement de ligne avec 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 éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Par défaut Chevauchement de ligne avec GridBagLayout()
    Bonjour !

    J'ai un petit soucis avec mes lignes dans mon gridBagLayout. Je ne sais pas vraiment d'où cela peu provenir.
    Juste que en fait, je dois ajouter beaucoup de lignes avec 2 composants, parfois une simple ligne avec un seul composant et parfois avec 3.

    Le problème, c'est qu'au final, seules mes lignes avec deux composants sont affichées correctement, et les autres chevauchent les lignes déjà ajoutées.

    Je me base quasiment uniquement par rapport aux attributs gridx, gridy d'une contrainte. Et je mets gridwidth à RELATIVE si je veux continer à ajouter mon élément sur la même ligne et REMAINDER si c'est sencé être le dernier....
    Cela peut il influer sur ma disposition?

  2. #2
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Salut,

    peut-être pourrait-tu poster ton code ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Par défaut
    En fait, je passe par une classe qui étend un JPanel à laquel, je demande à ajouter des lignes de la manière suivante:

    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
     
    class MyPanel {
        JPanel panel;
        posX = 0;
        posY = 0;
     
    // Add  1 component on the line
    public void addRow1Component(JComponent label) {
            GridBagConstraints c = new GridBagConstraints();
            setConstraintEndRow(c);
            c.insets = new Insets(0, 0, 5, 0);
            panel.add(label, c);
    }
     
    // Position la contrainte et permet de passer à la ligne ensuite
    private void setConstraintEndRow(GridBagConstraints c) {
            setConstraintSize(
                GridBagConstraints.REMAINDER, GridBagConstraints.RELATIVE,
                new Insets(MARGIN_TOP_COMPONENT, MARGIN_LEFT_COMPONENT, MARGIN_BOTTOM_COMPONENT, MARGIN_RIGHT_COMPONENT), 1,
                1, c);
            setConstraintsForm(GridBagConstraints.NONE, GridBagConstraints.WEST, 0, 0, posX, posY, c);
            posY++;
            posX = 0;
        }
     
    private void setConstraintSize(
            int gridwidth, int gridheight, Insets insets, double weightx, double weighty, GridBagConstraints c) {
            c.gridwidth = gridwidth;
            c.gridheight = gridheight;
            c.insets = insets;
            c.weightx = weightx;
            c.weighty = weighty;
        }
     
    private void setConstraintsForm(
            int fill, int anchor, int ipadx, int ipady, int gridx, int gridy, GridBagConstraints c) {
            c.fill = fill;
            c.anchor = anchor;
            c.ipadx = ipadx;
            c.ipady = ipady;
            c.gridx = gridx;
            c.gridy = gridy;
        }
     
     
       // Ajoute une ligne avec un certain nombre de composant
        public void addRow(JComponent... components) {
            if (0 == components.length) {
                return;
            }
     
            GridBagConstraints c = new GridBagConstraints();
            setConstraintEndRow(c);
            c.gridwidth = GridBagConstraints.RELATIVE;
     
            for (int i = 0; i < (components.length - 1); i++) {
                panel.add(components[i], c);
                c.gridx = c.gridx + 1;
            }
     
            c.gridwidth = GridBagConstraints.REMAINDER;
            panel.add(components[components.length - 1], c);
        }

  4. #4
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Ceci conviendrait mieux, je crois.

    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
    import java.awt.GridBagConstraints;
    import java.awt.Insets;
    import javax.swing.JComponent;
    import javax.swing.JPanel;
     
     
    public class MyPanel extends JPanel {
     
    	GridBagConstraints c = new GridBagConstraints();
    	int posX = 0;
        int posY = 0;
     
    	// Add  1 component on the line
    	public void addRow1Component(JComponent label) {
     
    	        setConstraintEndRow();
    	        c.insets = new Insets(0, 0, 5, 0);
    	        add(label, c);
    	}
     
    	// Position la contrainte et permet de passer à la ligne ensuite
    	private void setConstraintEndRow() {
    	        setConstraintSize(
    	            1, 1,
    	            new Insets(0, 0, 0, 0), 1,
    	            1);
    	        setConstraintsForm(GridBagConstraints.NONE, GridBagConstraints.WEST, 0, 0, posX, posY);
    	        posY++;
    	        posX = 0;
    	    }
     
    	private void setConstraintSize(
    	        int gridwidth, int gridheight, Insets insets, double weightx, double weighty) {
    	        c.gridwidth = gridwidth;
    	        c.gridheight = gridheight;
    	        c.insets = insets;
    	        c.weightx = weightx;
    	        c.weighty = weighty;
    	    }
     
    	private void setConstraintsForm(
    	        int fill, int anchor, int ipadx, int ipady, int gridx, int gridy) {
    	        c.fill = fill;
    	        c.anchor = anchor;
    	        c.ipadx = ipadx;
    	        c.ipady = ipady;
    	        c.gridx = gridx;
    	        c.gridy = gridy;
    	    }
     
     
    	   // Ajoute une ligne avec un certain nombre de composant
    	    public void addRow(JComponent... components) {
    	        if (0 == components.length) {
    	            return;
    	        }
     
    	        setConstraintEndRow();
    	        c.gridwidth = 1;
     
    	        for (int i = 0; i < (components.length - 1); i++) {
    	            add(components[i], c);
    	            c.gridx = c.gridx + 1;
    	        }
     
    	        c.gridwidth = GridBagConstraints.REMAINDER;
    	        add(components[components.length - 1], c);
    	    }
    }
    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
    import java.awt.GridBagLayout;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
     
    public class Essai {
     
    	public static void main(String[] args) {
    		JLabel label = new JLabel("1");
    		JButton btn2 = new JButton("2");
    		JButton btn3 = new JButton("3");
    		JButton btn4 = new JButton("4");
    		JButton btn5 = new JButton("5");
    		JButton btn6 = new JButton("6");
     
    		MyPanel panel = new MyPanel();
    		panel.setLayout(new GridBagLayout());
    		panel.addRow1Component(label);
    		panel.addRow(btn2, btn3, btn4);
    		panel.addRow(btn5, btn6);
     
    		JFrame f = new JFrame();
    		f.getContentPane().add(panel);
    		f.pack();
    		f.setVisible(true);		
    	}
     
    }

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Par défaut
    En effet, avec 1 cela fonctionne mieux, mais dans ma fonction "setEndConstraint", il faut quand même que je laisse le premier paramètre à REMAINDER.

    Mais je comprends pas trop. Je pensais qu'il s'agissait d'indiquer le passage à la ligne, puis la position relative par rapport à la colone...

    En tout cas Merci ^^

  6. #6
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Salut,

    REMAINDER n'indique pas un passage à la ligne !

    Cela indique que le composant sera contenu dans la cellule indiqué (par gridx et gridy je crois de mémoire), jusqu'à la fin de la cellule. Ceci horizontalement ou verticalement suivant que tu utilise REMAINDER dans gridwith ou gridheight (encore une fois de mémoire).

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

Discussions similaires

  1. Chevauchements de lignes avec psTricks
    Par budovic dans le forum Mise en forme
    Réponses: 2
    Dernier message: 28/01/2008, 08h07
  2. Concaténer deux fichiers Ligne/Ligne avec SH
    Par guiltouf dans le forum Linux
    Réponses: 7
    Dernier message: 22/05/2007, 14h35
  3. Comment aller a la ligne avec la commande ECHO
    Par juflata dans le forum Windows
    Réponses: 3
    Dernier message: 23/06/2004, 17h11
  4. [FP]Tracer Une ligne avec Dev-pascal
    Par yffick dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 17/12/2003, 16h33
  5. supprimer une ligne avec cle etrangere
    Par BaBas dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/07/2003, 11h24

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