Java : problème disposition GridBagLayout
Résolu
Nargonath
Messages postés
4
Statut
Membre
-
Nargonath Messages postés 4 Statut Membre -
Nargonath Messages postés 4 Statut Membre -
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 :
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) :
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:
- Java : problème disposition GridBagLayout
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick java voiture - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
1 réponse
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.