Je sais que vous avez résolu votre problème avec un mélange de JPanels
placés dans un gestionnaire de mise en page BorderLayout
. Si cela fonctionne, tant mieux.
Pour ceux qui sont curieux d'utiliser un GridBagLayout
comme solution, je présente cette classe comme exemple. Il vous suffit de copier-coller, compiler et exécuter. Faites glisser le coin de la fenêtre de cette petite application pour voir les effets du redimensionnement de la fenêtre.
// Code d'exemple montrant la flexibilité de GridBagLayout.
// Code source généré par WindowBuilder 1.0.0r37 dans Eclipse (Indigo Release) sur Mac OS X 10.6.7.
// © 2011 Basil Bourque. http://www.GridsGoneWild.com/
// Ce code source peut être utilisé librement pour toujours par toute personne prenant l'entière responsabilité de le faire.
// Chaque gestionnaire de mise en page inclus dans Java est assez différent des autres. Ils ont tous des forces et des faiblesses,
// chacun conçu pour différents buts et effets.
// GridBagLayout est le plus puissant et flexible, mais nécessite un certain apprentissage pour être compris.
// Drôle de commentaire vidéo animé par un programmeur GridBagLayout : http://madbean.com/anim/totallygridbag/
// Coder manuellement GridBagLayout est certainement fastidieux, et presque impossible pour des formulaires complexes. Je recommande donc l'utilisation
// d'un constructeur GUI visuel tel que WindowBuilder dans Eclipse, JFormDesigner de FormDev.com, ou Matisse dans NetBeans.
// Idées clés, "grow" et "fill" :
// • Dans la vue de conception de WindowBuilder, sélectionnez un widget, puis utilisez les icônes "Étendre horizontalement" et "Étendre verticalement" trouvées dans la barre d'outils supérieure.
// • Utilisez la propriété "fill" des "Contraintes" du widget (libellé, bouton) dans la feuille de propriétés de WindowBuilder.
// Idées supplémentaires :
// • Pour contenir plusieurs widgets dans chaque zone, utilisez des objets JPanel là où j'ai utilisé des objets JLabel et JButton individuels.
// L'emboîtement de JPanels à l'intérieur de JPanels (ou dans le contentPane de JFrame) est considéré comme normal en Swing. Chaque JPanel a son propre gestionnaire de mise en page.
// • Si nécessaire, vous pouvez définir la taille minimale, maximale et/ou préférée d'un widget ou d'un JPanel.
// • Si vous voulez que certains widgets ou JPanels obtiennent de manière disproportionnée plus ou moins de l'espace gagné ou perdu lors du redimensionnement d'une fenêtre,
// utilisez les propriétés "weightx" et "weighty".
// Conseils pour WindowBuilder :
// • Si c'est votre première fois : Ouvrez le fichier .java, puis cliquez sur le bouton "Design" en bas pour voir l'éditeur visuel.
// • Cliquez sur l'icône "Afficher les propriétés avancées" en haut de la feuille de propriétés d'un widget pour voir de nombreuses propriétés cachées.
// package com.votre.package.ici; // Décommentez cette ligne et modifiez-la en fonction de votre propre package.
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.GridBagLayout;
import javax.swing.JLabel;
import java.awt.GridBagConstraints;
import java.awt.Color;
import java.awt.Insets;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class GridBagLayout_Example extends JFrame {
private JPanel contentPane;
private JLabel lblVariableXVariableY;
private JButton btnVariableXFixedY;
private JLabel lblFixedXVariableY;
/**
* Lance l'application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GridBagLayout_Example frame = new GridBagLayout_Example();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Constructeur
*/
public GridBagLayout_Example() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
this.contentPane = new JPanel();
this.contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(this.contentPane);
GridBagLayout gbl_contentPane = new GridBagLayout();
gbl_contentPane.columnWidths = new int[]{0, 0, 0};
gbl_contentPane.rowHeights = new int[]{0, 0, 0};
gbl_contentPane.columnWeights = new double[]{0.0, 1.0, Double.MIN_VALUE};
gbl_contentPane.rowWeights = new double[]{1.0, 0.0, Double.MIN_VALUE};
this.contentPane.setLayout(gbl_contentPane);
this.lblFixedXVariableY = new JLabel("Fixe x, Variable y");
this.lblFixedXVariableY.setOpaque(true);
this.lblFixedXVariableY.setBackground(new Color(233, 150, 122));
GridBagConstraints gbc_lblFixedXVariableY = new GridBagConstraints();
gbc_lblFixedXVariableY.fill = GridBagConstraints.VERTICAL;
gbc_lblFixedXVariableY.gridheight = 2;
gbc_lblFixedXVariableY.insets = new Insets(0, 0, 5, 5);
gbc_lblFixedXVariableY.gridx = 0;
gbc_lblFixedXVariableY.gridy = 0;
this.contentPane.add(this.lblFixedXVariableY, gbc_lblFixedXVariableY);
this.lblVariableXVariableY = new JLabel("Variable x & y");
this.lblVariableXVariableY.setBackground(new Color(147, 112, 219));
this.lblVariableXVariableY.setOpaque(true);
GridBagConstraints gbc_lblVariableXVariableY = new GridBagConstraints();
gbc_lblVariableXVariableY.fill = GridBagConstraints.BOTH;
gbc_lblVariableXVariableY.insets = new Insets(0, 0, 5, 0);
gbc_lblVariableXVariableY.gridx = 1;
gbc_lblVariableXVariableY.gridy = 0;
this.contentPane.add(this.lblVariableXVariableY, gbc_lblVariableXVariableY);
this.btnVariableXFixedY = new JButton("Variable x, Fixe y");
this.btnVariableXFixedY.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
}
});
this.btnVariableXFixedY.setOpaque(true);
GridBagConstraints gbc_btnVariableXFixedY = new GridBagConstraints();
gbc_btnVariableXFixedY.fill = GridBagConstraints.HORIZONTAL;
gbc_btnVariableXFixedY.gridx = 1;
gbc_btnVariableXFixedY.gridy = 1;
this.contentPane.add(this.btnVariableXFixedY, gbc_btnVariableXFixedY);
}
}