¿Cómo puedo centrar correctamente un JPanel (TAMAÑO FIJO) dentro de un JFrame?

¡Hola a todos! Estoy tratando de resolver un problema aparentemente simple, pero no puedo solucionarlo. Estoy trabajando en una aplicación de muestra con bibliotecas Java / Swing; Tengo un JFrame y un JPanel. Solo quiero lograr los siguientes objetivos:

JPanelDEB estar centrado dentro del JFrame.

JPanelDEB tenerSIEMPR el tamaño que se especifica con
étodo @setPreferredSize (). NO DEBE cambiar su tamaño por debajo de este tamaño.

Intenté usando un GridBagLayout: es elSOLAMENT manera que puedo hacerlo.

Vea la muestra a continuación:

/* 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);

    }
}

Aqu Una captura de pantalla

No usaría un GridBagLayout para hacer algo demasiado simple. Intenté una solución más simple, usando un Box, pero esto no funciona:

Código de muestra

/* 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);

    }
}

Aqu Una captura de pantalla

¿Algunas ideas? Gracias a todos :-

Respuestas a la pregunta(2)

Su respuesta a la pregunta