Recherche…


Syntaxe

  • frame.setLayout (new GridBagLayout ()); // Définit GridBagLayout pour le cadre
  • pane.setLayout (new GridBagLayout ()); // Définit GridBagLayout pour Panel
  • JPanel pane = new JPanel (new GridBagLayout ()); // Définit GridBagLayout pour Panel
  • GridBagConstraints c = new GridBagConstraints () // Initialise un GridBagConstraint

Comment GridBagLayout fonctionne-t-il?

Les mises en page sont utilisées chaque fois que vous souhaitez que vos composants ne soient pas simplement affichés les uns à côté des autres. GridBagLayout est utile, car il divise votre fenêtre en lignes et en colonnes, et vous décidez de la rangée et de la colonne dans lesquelles placer les composants, ainsi que du nombre de lignes et de colonnes du composant.

Prenons cette fenêtre comme exemple. Les lignes de quadrillage ont été marquées pour indiquer la disposition.

GridBagLayout visualisé

Ici, j'ai créé 6 composants, conçus à l'aide d'un GridBagLayout.

Composant Position Taille
JLabel : "Mon application étonnante Swing" 0, 0 3, 1
JButton : "Bouton A" 0, 1 1, 1
JButton : "Button B" 1, 1 1, 1
JButton : "Bouton C" 2, 1 1, 1
JSlider 0, 2 3, 1
JScrollBar 0, 3 3, 1

Notez que la position 0, 0 est en haut à gauche: les valeurs x (colonne) augmentent de gauche à droite, les valeurs y (ligne) augmentent de haut en bas.

Pour commencer à GridBagLayout des composants dans un GridBagLayout , commencez par définir la disposition de votre volet JFrame ou contenu.

frame.setLayout(new GridBagLayout());
//OR
pane.setLayout(new GridBagLayout());
//OR
JPanel pane = new JPanel(new GridBagLayout()); //Add the layout when creating your content pane

Notez que vous ne définissez jamais la taille de la grille. Cela se fait automatiquement lorsque vous ajoutez vos composants.

Ensuite, vous devrez créer un objet GridBagConstraints .

GridBagConstraints c = new GridBagConstraints();

Pour vous assurer que vos composants remplissent la taille de la fenêtre, vous pouvez définir le poids de tous les composants sur 1. Le poids est utilisé pour déterminer comment répartir l'espace entre les colonnes et les lignes.

c.weightx = 1;
c.weighty = 1;

Vous pouvez également faire en sorte que les composants occupent autant d’espace horizontal que possible.

c.fill = GridBagConstraints.HORIZONTAL;

Vous pouvez également définir d'autres options de remplissage si vous le souhaitez.

GridBagConstraints.NONE //Don't fill components at all
GridBagConstraints.HORIZONTAL //Fill components horizontally
GridBagConstraints.VERTICAL //Fill components vertically
GridBagConstraints.BOTH //Fill components horizontally and vertically

Lors de la création de composants, vous souhaitez définir l'emplacement de la grille et le nombre de cases à utiliser. Par exemple, pour placer un bouton dans la 3ème ligne de la 2ème colonne et occuper un espace de 5 x 5, procédez comme suit. Gardez à l'esprit que la grille commence à 0, 0 et non 1, 1 .

JButton button = new JButton("Fancy Button!");
c.gridx = 2;
c.gridy = 1;
c.gridwidth = 5;
c.gridheight = 5;
pane.add(buttonA, c);

Lorsque vous ajoutez des composants à votre fenêtre, n'oubliez pas de transmettre les contraintes en tant que paramètre. Cela peut être vu dans la dernière ligne de l'exemple de code ci-dessus.

Vous pouvez réutiliser les mêmes GridBagConstraints pour chaque composant - le changer après l'ajout d'un composant ne change pas le composant ajouté précédemment.

Exemple

Voici le code de l'exemple au début de cette section.

JFrame frame = new JFrame("Super Awesome Window Title!"); //Create the JFrame and give it a title
frame.setSize(512, 256); //512 x 256px size
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //Quit the application when the JFrame is closed

JPanel pane = new JPanel(new GridBagLayout()); //Create a pane to house all content, and give it a GridBagLayout
frame.setContentPane(pane);

GridBagConstraints c = new GridBagConstraints();
c.weightx = 1;
c.weighty = 1;
c.fill = GridBagConstraints.HORIZONTAL;

JLabel headerLabel = new JLabel("My Amazing Swing Application");
c.gridx = 0;
c.gridwidth = 3;
c.gridy = 0;
pane.add(headerLabel, c);

JButton buttonA = new JButton("Button A");
c.gridx = 0;
c.gridwidth = 1;
c.gridy = 1;
pane.add(buttonA, c);

JButton buttonB = new JButton("Button B");
c.gridx = 1;
c.gridwidth = 1;
c.gridy = 1;
pane.add(buttonB, c);

JButton buttonC = new JButton("Button C");
c.gridx = 2;
c.gridwidth = 1;
c.gridy = 1;
pane.add(buttonC, c);

JSlider slider = new JSlider(0, 100);
c.gridx = 0;
c.gridwidth = 3;
c.gridy = 2;
pane.add(slider, c);

JScrollBar scrollBar = new JScrollBar(JScrollBar.HORIZONTAL, 20, 20, 0, 100);
c.gridx = 0;
c.gridwidth = 3;
c.gridy = 3;
pane.add(scrollBar, c);

frame.setVisible(true); //Show the window

Exemple GridBagLayout



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow