2009-12-18 5 views
0

Avec le code suivant, je souhaite créer un composant générique Jpanel et ajouter deux sous-composants, un Label et un JTextField. Je dois ajouter les composants, mais ils ne sont pas alignés.Composant JComponent et gauche des composants

(Non, je n'ai pas besoin de GridBagLayout, mais j'essayais de faire un exemple basique avec GridBag .Pouvez-vous décrire comment faire cela avec GridBag et pas une autre mise en page). Au-dessus de ce niveau, j'ajoute juste le JPanel et je le remplis horizontalement.

constraints.gridy++; 
constraints.fill = GridBagConstraints.HORIZONTAL; 
this.add(this.buildStatusComponent(), constraints); 
+2

Nous aurions besoin de voir plus sur le panneau externe je pense. Mais si mes soupçons sont corrects, définir des bordures sur les composants vous aidera à voir où se trouve votre erreur de mise en page. (Astuce: le composant d'état n'est probablement pas en expansion pour remplir sa 'cellule' car il n'a pas de poidsx.) – PSpeed

Répondre

1

Vous ne semblez pas utiliser complètement les GridBagConstraints. Au lieu de taper group.setAlignmentX (JComponent.LEFT_ALIGNMENT) (que je n'ai jamais l'air de travailler pour quelque chose haha), utilisez simplement le fichier contraints.anchor = GridBagConstraints.WEST.

Beaucoup de gens n'aiment pas GridBagLayout mais je trouve qu'il est facile de travailler avec une fois que vous comprenez comment cela fonctionne. La chose la plus difficile à gérer est le poids de l'objet dans la grille. Mais spécifiquement avec cette question, vous voulez juste ancrer un composant à côté des constantes GridBagConstraint et vous fier à la classe de contraintes pour contrôler où vont les choses.

EDIT: ok, alors donnez leur poids. (Bien que cela ne peut pas résoudre le problème hehe)

constraints.weightx = 1d; 

Ce qui se passe est que tout a le même poids il est espaçant uniformément je crois. Si vous voulez 'cramper' les éléments, vous pouvez ajouter un JPanel vide après le dernier composant et définir fill = REMAINDER et avoir ce poids de 1 et les autres composants de poids 0. Le type de poids détermine combien un composant peut pousser "autour d'un autre.

GridBagConstraints gbc = new GridBagConstraints(); 
JPanel p = new JPanel(new GridBagLayout()); 
gbc.gridx = 0; 
gbc.gridy = 0; 
gbc.anchor = GridBagConstraints.WEST; 

p.add(new JLabel("A"), gbc); 
gbc.gridx++; 
p.add(new JLabel("B"), gbc); 
gbc.gridx++; 
gbc.weightx = 1d; 
gbc.fill = GridBagConstraints.REMAINDER; 
p.add(new JPanel(), gbc); 
gbc.fill = GridBagConstraints.NONE; 
gbc.weightx = 0d; 
.... continue on filling stuff... 

Ceci est une façon d'y faire face. Jouer un peu avec ça jusqu'à ce que vous ayez une idée de comment cela fonctionne est bon.

+0

J'ai essayé cela, il n'a pas bougé les composants du centre. –

0

Le problème avec la publication de quelques lignes de code aléatoires est que nous ne connaissons pas le contexte de l'utilisation du code.

La section du tutoriel Swing sur comment utiliser GridBagLayout explique pourquoi l'utilisation d'une contrainte weightx est importante. Puisque vos panneaux parent et enfant utilisent un GridBagLayout, nous ne pouvons pas dire où se situe le problème.

Si vous avez besoin de plus d'aide poster votre SSCCE qui démontre le problème.

Questions connexes