Comment puis-je centrer correctement un JPanel (FIXED SIZE) dans un JFrame?

Salut à tous!
Je suis en train de résoudre un -en apparence - un problème simple, mais je ne peux pas le fixer.
Je suis en train de travailler sur un exemple d'application avec Java/Swing bibliothèques;
J'ai une JFrame et un Composite.
Je veux juste atteindre les objectifs suivants:

  1. Composite DOIT être centré à l'intérieur de la JFrame.
  2. Composite DOIT ont TOUJOURS la taille est spécifiée avec
    setPreferredSize() la méthode. Il ne DOIT PAS être redimensionnée en vertu de cette taille.

J'ai essayé en utilisant un GridBagLayout: c'est le SEULEMENT façon je peux le faire.

Voir l'exemple ci-dessous:

/* file StackSample01.java */

import java.awt.*;
import javax.swing.*;

public class StackSample01 {
    public static void main(String [] args) {

        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(100, 100));
        panel.setBackground(Color.RED);  

        frame.setLayout(new GridBagLayout());
        frame.add(panel, new GridBagConstraints());
        frame.setSize(new Dimension(200, 200));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

    }
}

Ici une capture d'écran:

Je ne voudrais pas utiliser un GridBagLayout pour faire une chose aussi simple.
J'ai essayé la solution la plus simple, en utilisant une Boîte, mais cela ne fonctionne pas:

Exemple de code:

/* file StackSample02.java */

import java.awt.*;
import javax.swing.*;

public class StackSample02 {
    public static void main(String [] args) {

        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(100, 100));
        panel.setBackground(Color.RED); //for debug 

        panel.setAlignmentX(JComponent.CENTER_ALIGNMENT); //have no effect

        Box box = new Box(BoxLayout.Y_AXIS);

        box.add(Box.createVerticalGlue());
        box.add(panel);     
        box.add(Box.createVerticalGlue()); //causes a deformation

        frame.add(box);
        frame.setSize(new Dimension(200, 200));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

    }
}

Ici une capture d'écran,

Des idées? Merci à tous 🙂

source d'informationauteur IT.