Placez côté bouton côte à côte
-
20-09-2019 - |
Question
comment puis-je faire un côté bouton place côte à côte. J'ai utilisé un GridBagLayout pour concevoir le problème layout.The est que le lieu de bouton trop loin les uns des autres. J'ai essayé de choisir le centre comme point d'ancrage, mais ce qui rend le chevauchement de bouton. Si je ouest et est, le bouton placé trop loin les uns des autres.
par exemple. SAUVER ---------- NOUVEAU MODÈLE au lieu de SAVE NEW_PATTERN.
JButton bSave = new JButton("SAVE");
JButton bPattern = new JButton("NEW_PATTERN");
con = new GridBagConstraints();
con.anchor=GridBagConstraints.WEST;
con.gridy = 3; con.gridx = 0;
con.gridwidth = 1; con.gridheight = 1;
con.insets= new Insets(2,5,2,2);
m.setConstraints(bSave, con);
c.add(bSave);
con.weightx=1;
con.gridy=3; con.gridx=0;
con.anchor=GridBagConstraints.EAST;
m.setConstraints(bPattern,con);
c.add(bPattern);
La solution
Merci AKF, j'ai résolu le problème en plaçant le FlowLayout à l'intérieur du GridBagLayout.
....
JButton bSave = new JButton("Save");
JButton bPattern = new JButton("New Pattern");
JPanel pContainer = new JPanel();
pContainer.setLayout(new FlowLayout(FlowLayout.CENTER));
pContainer.add(bSave); pContainer.add(bPattern);
con = new GridBagConstraints();
con.anchor=GridBagConstraints.CENTER;
con.gridy = 3; con.gridx = 0;
con.gridwidth = 1; con.gridheight = 1;
m.setConstraints(pContainer, con);
c.add(pContainer);
....
Autres conseils
GridBagLayout est le plus compliqué des mises en page. Si vous êtes juste à aligner deux boutons, je vous conseille d'utiliser FlowLayout (par défaut) ou BoxLayout. Mais, si vous voulez utiliser GridBagLayout, au lieu de régler l'ancre, régler la gridx à 1 pour le deuxième bouton. Aussi, ne sais pas pourquoi vous avez un gridy de 3 au lieu de gridy de 0 (sauf si il y a d'autres codes que vous avez omis qui utilise gridy de 0-2).
Pourquoi ne lisez pas vos anciens messages avant de poster de nouvelles questions?
Vous où donné un lien vers le tutoriel Swing dans votre dernière affectation. Alors, lisez le tutoriel, essayez les exemples et utiliser le gestionnaire de mise en page appropriée ou une combinaison de gestionnaires de mise en page pour le travail.
Au lieu de GridBagLayout
, GridLayout
est une solution simple. Il est facile de mettre en place:
JButton bSave = new JButton("SAVE");
JButton bPattern = new JButton("NEW_PATTERN");
JPanel panel = new JPanel(new GridLayout(1,2); // 1 row, 2 cols
panel.add(bSave);
panel.add(bPattern);
EDIT:
Juste par curiosité, je couchait avec votre original et trouvé une combinaison qui permet l'utilisation de la seule GridBagLayout. Il est pas très différent de l'original:
GridBagConstraints con = new GridBagConstraints();
con.anchor=GridBagConstraints.WEST;
con.gridy = 3;
con.gridx = 0;
con.gridwidth = 1;
con.gridheight = 1;
con.insets= new Insets(2,5,2,2);
m.setConstraints(bSave, con);
c.add(bSave);
con.weightx=0;
con.gridy=3;
con.gridx=1;//this is the big diff!
con.anchor=GridBagConstraints.EAST;
m.setConstraints(bPattern,con);
c.add(bPattern);
Ce code du côté de situer les boutons côte à côte dans le centre de l'écran.
La clé sont:
constraints.fill = GridBagConstraints.NONE; -> faire les butons ne pas étendre
constraints.insets.right = 0; -> rend les boutons tiennent côte à côte
constraints.insets.left = 0; -> rend les boutons tiennent côte à côte
constraints.weightx = 1 -> rend la cellule dans wich les boutons sont EXPANDO horizontalement
constraints.anchor = GridBagConstraints.EAST; -> fait le bouton gauche pour se tenir à la de la cellule
constraints.anchor = GridBagConstraints.WEST; -> fait le bouton droit de se porter à gauche de la cellule
public static void main(String args[]){
JFrame frame=new JFrame();
Container cont=frame.getContentPane();
cont.setLayout(new GridBagLayout());
GridBagConstraints constraints=new GridBagConstraints();
constraints.insets.top=2;
constraints.insets.bottom=2;
constraints.insets.left=0;// increment to separate buttons
constraints.insets.right=0;// increment to separate buttons
constraints.fill=GridBagConstraints.NONE;
constraints.weightx=1;
constraints.gridy=0;
constraints.anchor=GridBagConstraints.EAST;
constraints.gridx=0;
cont.add(new JButton("Save"),constraints);
constraints.anchor=GridBagConstraints.WEST;
constraints.gridx=1;
cont.add(new JButton("New Pattern"),constraints);
frame.pack();
frame.setVisible(true);
}
Je vous suggère de lire le tutoriel pour GridBagLayout car il est hors de la boîte du gestionnaire de mise en page la plus avancée et rend les autres obsolètes. Il vaut bien apprendre pour ces raisons. Il fait tout simple si vous pensez comme une grille et tout ce que vous devez obtenir le droit est alors les coordonnées x et y qui est ce que vous avez manqué dans votre code. Vous étiez presque là:)
Le mélange des gestionnaires de mise en page est généralement une très mauvaise idée car ils travaillent tous légèrement différents en matière de remplir des conteneurs avec un espace supplémentaire.
@camickr Sur la base de mon peuple de commentaire doit utiliser GridBagLayout car il est le plus flexible et peut être utilisé dans toutes les situations. Avoir un seul devrait se traduire par simple et maintenable pourrait. Je trouve aussi très facile à lire car il est logiquement mis en correspondance. Les contstraints ne changent que si vous utilisez un objet de contraintes pour tous les composants, ce qui est évidemment une mauvaise idée.