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 :

[UI]Aide sur les GridBagLayout


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2002
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 37
    Points : 29
    Points
    29
    Par défaut [UI]Aide sur les GridBagLayout
    bonjour,

    je développe une interface graphique et là je suis sur une fenêtre avec pas mal d'éléments, j'ai découpé des zones qui regroupe des éléments entre eux.
    Le problème que je rencontre c'est que je n'arrive pas à agencer mes zones comme je l'entends, pourtant j'ai l'impression de bien faire donc je ne comprends pas.

    Je suis parti sur une grille de 5 cases de large et 4 de haut pour paramétrer les contraintes de mes zones (des JPanel au fait).

    que ce soit à la main ou par Visual Editor (sous Eclipse) le résultat est le même, mes éléments n'ont pas tout à fait la taille attendue.
    Eclispe arrive à gérer de manière statique en jouant sur les marges et les internal padding.

    Ce que je ne comprends pas, c'est que j'ai bien découpé sur papier mes zones de façon à ce qu'elles occupe 1 ou plusieurs cases, de manière très claire, je paramètre mes contraintes, et elles n'apparaissent pas comme prévu.



    si on regarde, la zone en haut à gauche à les memes contraintes (sauf positionnement gridx) que la case en haut à droite, et pourtant elles n'occupent pas le même espace.

    Et là je comprends pas pourquoi.

    je vous remercie d'avance.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 167
    Points : 120
    Points
    120
    Par défaut
    Ca m'a l'air correct pourtant...
    Peut être qu'en jouant sur les poids... (weightx et weighty)

    Pour recap:
    gridx, gridy Indique la colonne et la ligne de départ de la cellule
    gridwidth, gridheight Indique l'étendu en colonnes et en ligne
    weightx, weighty Indique la capacité de la cellule a s'agrandir
    anchor Alignement du composant à l'intérieur d'une cellule
    fill Indique le comportement de remplissage du composant

    Faudrai peut être posté les contraintes que tu applique pour détecter le problème...parce que normalement avec un GridBagLayout on dois arrivé a faire ce que l'on souhaite...
    La naissance est le seul fruit du hasard

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Dans les propriétés de ton objet tu dois avoir un champ qui te permet d'élargir ton objet en longueur et/ou largeur en fonction de ta grille. En activant cette option ton objet occupera exactement la taille la case allouée, il ne te restera plus qu'à jouer avec les poids, les longueurs maxi, mini et par défaut.

    Cà devrait être good

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juin 2002
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Ce que je ne comprends pas, c'est que j'ai calculé ma grille comme 5 cases de large (et 4 de haut - équivalent à 2 lignes de composants grosso modo).

    Sur la première ligne : 1 composant occupant 1 case, 1 composant occupant 3 cases (de large) et 1 composant 1 case
    et sur la deuxième ligne : 1 composant 1 case, 1 composant 2 cases et 1 composant 2 cases aussi.

    Ca me parait pourtant très simple comme règle de positionnement et pourtant il ne donne pas la même taille. alors que les poids sont identiques, les internal padding aussi, les marges aussi, etc...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 167
    Points : 120
    Points
    120
    Par défaut
    Oui mais ca peux être du a la taille des composants que tu insère dans ta grille...
    Par exemple, si avec ta configuration tu met un panel plein de composants, et le panel a coté entièrement vide...même s'ils ont les mêmes paramètres en terme de grille, le vide sera bcp plus petit que le plein...je sais pas si je m'explique bien...enfin...
    La naissance est le seul fruit du hasard

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juin 2002
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    En l'occurence, les panels sont vides mais qu'ils soient vides ou pleins j'obtiens le même résultat. Il fusionne des cellules là où y'a pas besoin.
    J'ai trouvé un moyen d'arriver à ce que je cherche en mettant l'ancrage des cellules à gauche (WEST) mais ça doit être fonction des cas.


    Je mets une image où j'ai mis toutes mes cellules avec fill = NONE et anchor = CENTER

    On voit bien qu'il y a un problème. J'ai fait afficher la grille avec VE sous Eclipse...



  7. #7
    Nouveau membre du Club
    Inscrit en
    Juin 2002
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Personne ?

    Si y'en a qui veulent s'amuser à essayer :

    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
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
     
     
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
     
    import javax.swing.JDialog;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
     
    public class TestUSM extends JDialog
    {
     
    	private JPanel jContentPane = null;
    	private JPanel jPanel = null;
    	private JPanel jPanel1 = null;
    	private JPanel jPanel3 = null;
    	private JPanel jPanel4 = null;
    	private JPanel jPanel5 = null;
    	private JPanel jPanel6 = null;
    	/**
             * This method initializes 
             * 
             */
    	public TestUSM(JFrame owner) {
    		super(owner);
    		initialize();
    		setVisible(true);
    	}
    	/**
             * This method initializes this
             * 
             * @return void
             */
    	private void initialize() {
            this.setContentPane(getJContentPane());
            this.setSize(594, 418);
     
    	}
    	/**
             * This method initializes jContentPane 
             *      
             * @return javax.swing.JPanel   
             */    
    	private JPanel getJContentPane() {
    		if (jContentPane == null) {
    			jContentPane = new JPanel();
    			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
    			GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
    			GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
    			GridBagConstraints gridBagConstraints5 = new GridBagConstraints();
    			GridBagConstraints gridBagConstraints6 = new GridBagConstraints();
    			GridBagConstraints gridBagConstraints7 = new GridBagConstraints();
    			jContentPane.setLayout(new GridBagLayout());
    			gridBagConstraints1.gridx = 0;
    			gridBagConstraints1.gridy = 0;
    			gridBagConstraints1.ipadx = 0;
    			gridBagConstraints1.ipady = 0;
    			gridBagConstraints1.insets = new java.awt.Insets(0,0,0,0);
    			gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
    			gridBagConstraints2.gridx = 0;
    			gridBagConstraints2.gridy = 1;
    			gridBagConstraints2.ipadx = 0;
    			gridBagConstraints2.ipady = 0;
    			gridBagConstraints2.insets = new java.awt.Insets(0,0,0,0);
    			gridBagConstraints2.gridwidth = 1;
    			gridBagConstraints2.fill = java.awt.GridBagConstraints.BOTH;
    			gridBagConstraints4.gridx = 1;
    			gridBagConstraints4.gridy = 0;
    			gridBagConstraints4.gridwidth = 3;
    			gridBagConstraints4.ipadx = 0;
    			gridBagConstraints4.ipady = 0;
    			gridBagConstraints4.insets = new java.awt.Insets(0,0,0,0);
    			gridBagConstraints4.weightx = 0.0D;
    			gridBagConstraints4.fill = java.awt.GridBagConstraints.BOTH;
    			gridBagConstraints5.gridx = 4;
    			gridBagConstraints5.gridy = 0;
    			gridBagConstraints5.ipadx = 0;
    			gridBagConstraints5.ipady = 0;
    			gridBagConstraints5.insets = new java.awt.Insets(0,0,0,0);
    			gridBagConstraints5.gridwidth = GridBagConstraints.REMAINDER;
    			gridBagConstraints5.fill = java.awt.GridBagConstraints.BOTH;
    			gridBagConstraints6.gridx = 1;
    			gridBagConstraints6.gridy = 1;
    			gridBagConstraints6.ipadx = 0;
    			gridBagConstraints6.ipady = 0;
    			gridBagConstraints6.insets = new java.awt.Insets(0,0,0,0);
    			gridBagConstraints6.gridwidth = 2;
    			gridBagConstraints6.fill = java.awt.GridBagConstraints.BOTH;
    			gridBagConstraints7.gridx = 3;
    			gridBagConstraints7.gridy = 1;
    			gridBagConstraints7.gridwidth = 2;
    			gridBagConstraints7.ipadx = 0;
    			gridBagConstraints7.ipady = 0;
    			gridBagConstraints7.insets = new java.awt.Insets(0,0,0,0);
    			gridBagConstraints7.fill = java.awt.GridBagConstraints.BOTH;
    			jContentPane.add(getJPanel(), gridBagConstraints1);
    			jContentPane.add(getJPanel1(), gridBagConstraints2);
    			jContentPane.add(getJPanel3(), gridBagConstraints4);
    			jContentPane.add(getJPanel4(), gridBagConstraints5);
    			jContentPane.add(getJPanel5(), gridBagConstraints6);
    			jContentPane.add(getJPanel6(), gridBagConstraints7);
    		}
    		return jContentPane;
    	}
    	/**
             * This method initializes jPanel       
             *      
             * @return javax.swing.JPanel   
             */    
    	private JPanel getJPanel() {
    		if (jPanel == null) {
    			jPanel = new JPanel();
    			jPanel.setLayout(null);
    			jPanel.setBackground(new java.awt.Color(167,176,238));
    			jPanel.setPreferredSize(new java.awt.Dimension(80,80));
    		}
    		return jPanel;
    	}
    	/**
             * This method initializes jPanel1      
             *      
             * @return javax.swing.JPanel   
             */    
    	private JPanel getJPanel1() {
    		if (jPanel1 == null) {
    			jPanel1 = new JPanel();
    			jPanel1.setLayout(null);
    			jPanel1.setBackground(new java.awt.Color(238,238,129));
    			jPanel1.setPreferredSize(new java.awt.Dimension(80,80));
    		}
    		return jPanel1;
    	}
    	/**
             * This method initializes jPanel3      
             *      
             * @return javax.swing.JPanel   
             */    
    	private JPanel getJPanel3() {
    		if (jPanel3 == null) {
    			jPanel3 = new JPanel();
    			jPanel3.setLayout(null);
    			jPanel3.setBackground(new java.awt.Color(26,120,238));
    			jPanel3.setPreferredSize(new java.awt.Dimension(240,80));
    		}
    		return jPanel3;
    	}
    	/**
             * This method initializes jPanel4      
             *      
             * @return javax.swing.JPanel   
             */    
    	private JPanel getJPanel4() {
    		if (jPanel4 == null) {
    			jPanel4 = new JPanel();
    			jPanel4.setLayout(null);
    			jPanel4.setBackground(new java.awt.Color(130,238,75));
    			jPanel4.setPreferredSize(new java.awt.Dimension(80,80));
    		}
    		return jPanel4;
    	}
    	/**
             * This method initializes jPanel5      
             *      
             * @return javax.swing.JPanel   
             */    
    	private JPanel getJPanel5() {
    		if (jPanel5 == null) {
    			jPanel5 = new JPanel();
    			jPanel5.setLayout(null);
    			jPanel5.setBackground(new java.awt.Color(238,176,143));
    			jPanel5.setPreferredSize(new java.awt.Dimension(160,80));
    		}
    		return jPanel5;
    	}
    	/**
             * This method initializes jPanel6      
             *      
             * @return javax.swing.JPanel   
             */    
    	private JPanel getJPanel6() {
    		if (jPanel6 == null) {
    			jPanel6 = new JPanel();
    			jPanel6.setLayout(null);
    			jPanel6.setBackground(new java.awt.Color(154,109,44));
    			jPanel6.setPreferredSize(new java.awt.Dimension(160,80));
    		}
    		return jPanel6;
    	}
    }

  8. #8
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Par curiosité, je me suis amusé à faire un panel identique à celui dont tu présentes, et le positionnement est parfait, et respecte ce que tu veux, par contre, j'ai par encore essayé, mais il se peut que des composants dans les panels modifient l'espace occupé par les panels?
    voici le code:
    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
     
    package gui;
     
    import java.awt.Dimension;
     
    import java.awt.GridBagLayout;
    import java.awt.Insets;
    import java.awt.GridBagConstraints;
    import javax.swing.JPanel;
    import javax.swing.WindowConstants;
    import javax.swing.JFrame;
     
     
     
     
     
     
    public class monGridBag extends javax.swing.JPanel {
    	private JPanel jPanel1;
     
    	private JPanel jPanel7;
     
    	private JPanel jPanel6;
     
    	private JPanel jPanel5;
     
    	private JPanel jPanel4;
     
    	private JPanel jPanel3;
     
    	private JPanel jPanel2;
     
     
    	public static void main(String[] args) {
    		JFrame frame = new JFrame();
    		frame.getContentPane().add(new monGridBag());
    		frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    		frame.pack();
    		frame.show();
    	}
     
    	public monGridBag() {
    		super();
    		initGUI();
    	}
     
    	private void initGUI() {
    		try {
    			GridBagLayout thisLayout = new GridBagLayout();
    			thisLayout.columnWeights = new double[] { 0.1, 0.1, 0.1, 0.1, 0.1 };
    			thisLayout.columnWidths = new int[] { 7, 7, 7, 7, 7 };
    			thisLayout.rowWeights = new double[] { 0.1, 0.1, 0.1, 0.1 };
    			thisLayout.rowHeights = new int[] { 7, 7, 7, 7 };
    			this.setLayout(thisLayout);
    			setPreferredSize(new Dimension(400, 300));
    			{
    				jPanel1 = new JPanel();
    				this.add(jPanel1, new GridBagConstraints(0, 0, 1, 2, 0.0, 0.0,
    						GridBagConstraints.CENTER, GridBagConstraints.BOTH,
    						new Insets(0, 0, 0, 0), 0, 0));
    				jPanel1.setBackground(new java.awt.Color(255, 128, 192));
    			}
    			{
    				jPanel2 = new JPanel();
    				this.add(jPanel2, new GridBagConstraints(1, 0, 3, 2, 0.0, 0.0,
    						GridBagConstraints.CENTER, GridBagConstraints.BOTH,
    						new Insets(0, 0, 0, 0), 0, 0));
    				jPanel2.setBackground(new java.awt.Color(255, 128, 64));
    			}
    			{
    				jPanel3 = new JPanel();
    				this.add(jPanel3, new GridBagConstraints(4, 0, 1, 2, 0.0, 0.0,
    						GridBagConstraints.CENTER, GridBagConstraints.BOTH,
    						new Insets(0, 0, 0, 0), 0, 0));
    				jPanel3.setBackground(new java.awt.Color(128, 128, 255));
    			}
    			{
    				jPanel4 = new JPanel();
    				this.add(jPanel4, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0,
    						GridBagConstraints.CENTER, GridBagConstraints.BOTH,
    						new Insets(0, 0, 0, 0), 0, 0));
    				jPanel4.setBackground(new java.awt.Color(0, 0, 255));
    			}
    			{
    				jPanel5 = new JPanel();
    				this.add(jPanel5, new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0,
    						GridBagConstraints.CENTER, GridBagConstraints.BOTH,
    						new Insets(0, 0, 0, 0), 0, 0));
    				jPanel5.setBackground(new java.awt.Color(255, 255, 0));
    			}
    			{
    				jPanel6 = new JPanel();
    				this.add(jPanel6, new GridBagConstraints(1, 2, 2, 2, 0.0, 0.0,
    						GridBagConstraints.CENTER, GridBagConstraints.BOTH,
    						new Insets(0, 0, 0, 0), 0, 0));
    				jPanel6.setBackground(new java.awt.Color(128, 255, 255));
    			}
    			{
    				jPanel7 = new JPanel();
    				this.add(jPanel7, new GridBagConstraints(3, 2, 2, 2, 0.0, 0.0,
    						GridBagConstraints.CENTER, GridBagConstraints.BOTH,
    						new Insets(0, 0, 0, 0), 0, 0));
    				jPanel7.setBackground(new java.awt.Color(255, 0, 0));
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
     
    }

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juin 2002
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Ok, super ça marche !
    Je connaissais pas justement ce truc des columnsWidths et rowHeights. Ca permet d'imposer un nombre de lignes et de colonnes au GridBag.
    J'avais pas trop regarder dans la classe GridBagLayout elle même, je me contentais de jouer sur les contraintes des composants eux mêmes.

    bon, en l'occurence j'ai outre passé le problème en réorganisant mes panels autrement mais je le saurais à l'avenir.

    Merci beaucoup !

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

Discussions similaires

  1. besoin d'aide sur les ORB
    Par floorfille dans le forum CORBA
    Réponses: 4
    Dernier message: 24/08/2004, 15h43
  2. Aide sur les groupes (ADO)
    Par portu dans le forum QuickReport
    Réponses: 3
    Dernier message: 18/08/2004, 16h13
  3. Filemaker ... besoin d'aide sur les Plugin
    Par joange dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 22/04/2004, 10h16
  4. Petite aide sur les triggers ?
    Par krimson dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 16/04/2004, 16h28
  5. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19

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