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);
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top