1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
* Created by IntelliJ IDEA.
* User: bebe
* Date: 18-Oct-2006
* Time: 17:47:07
* To change this template use File | Settings | File Templates.
*/
public class MyFrame extends JFrame {
public MyFrame() {
initGui();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 300);
setLocationRelativeTo(null);
}
private void initGui() {
setLayout(new GridBagLayout());
JPanel westPanel = new JPanel();
westPanel.setBorder(BorderFactory.createLineBorder(Color.black, 1));
JPanel centerPanel = new JPanel();
centerPanel.setBorder(BorderFactory.createLineBorder(Color.black, 1));
JPanel eastPanel = new JPanel();
eastPanel.setBorder(BorderFactory.createLineBorder(Color.black, 1));
centerPanel.setPreferredSize(new Dimension(200, 12));
centerPanel.setMinimumSize(new Dimension(200, 12));
centerPanel.setLayout(new GridBagLayout());
/* Rien a voir avec le probleme de depart, je veux juste ajouter sur le panel,
deux label pour afficher la taille que j'ai mi. */
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
// gbc.gridy = GridBagConstraints.RELATIVE
centerPanel.add(new JLabel("Minimum Width = 200"), gbc); // quand gridy est sur relative, la premiere fois gridy = 0
centerPanel.add(new JLabel("Prefered Width = 200"), gbc); // la deuxieme fois, gridy = 1
/* -- fini le truc rien a voir -- */
/* ici sont les constrainte interessante. */
gbc = new GridBagConstraints(); // je réinitialise ma contrainte aux valeurs par default.
/* 1- je met gbc.gridx = RELATIVE
c'est le defaut sur relative mais je le fais pour faire le detail complet.
ca veut dire qu'il incremente gridx chaque fois que tu fais un add en utilisant cette constrainte.
*/
gbc.gridx = GridBagConstraints.RELATIVE;
/* 2- je met gbc.gridy sur REMAINDER; j'ai qu'une seule ligne; c'est donc la derniere. */
gbc.gridy = GridBagConstraints.REMAINDER;
/* 3-
le premier panel etre extensible des deux cotes horizontal et vertical. => fill sur BOTH
verticalement il peut prendre tout l'espace qui est en trop . => weighty de 1.
horizontalement il peut prendre 50% de l'espace qui est en trop. => weightx de 0.5
*/
gbc.weighty = 1.0;
gbc.weightx = 0.5;
gbc.fill = GridBagConstraints.BOTH;
add(westPanel, gbc);
/* 4- le panel du centre peut lui grandir que verticalment. => fill sur Vertical.
verticalement il peut prendre tout l'espace qui est en trop. => weighty peut rester sur 1.0
mais horizontalement, il peut pas bouger. => weightx doit revenir sur 0.0;
*/
gbc.weightx = 0.0;
gbc.fill = GridBagConstraints.VERTICAL;
/* tu peux aussi rajouter des Insets */
// gbc.insets.left = gbc.insets.right = 50;
add(centerPanel, gbc);
/* si on met des insets faut les supprimer */
// gbc.insets.left = gbc.insets.right = 0;
/* 5- pareil que le premier panel. on aurait pu ajouter ce panel avant le panel du centre et tu aurais gagner
deux lignes. mais en detail c'est mieux pour comprendre.*/
gbc.weightx = 0.5;
gbc.fill = GridBagConstraints.BOTH;
add(eastPanel, gbc);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
new MyFrame().setVisible(true);
}
});
}
} |
Partager