Forzar restricciones de tamaño en Applet incrustado en html

Tengo un Applet de Java con un GridLayout que contiene widgets que deseo que sean cuadrados, y se mantienen compactados entre sí (para que sus tamaños no sean restringidos).
Sin embargo, deseo que GridLayout ocupe tanto espacio como sea posible antes de que sea demasiado grande para la pantalla o no pueda conservar la cuadratura del widget.
Tenga en cuenta que el número de filas y columnas en el GridLayout no son necesariamente iguales (el Grid como un todo puede ser no cuadrado)

Este Applet se muestra a través de este archivo html;

      

Actualmente, esto hace que Applet se expanda en la ventana en la que se encuentra; la cuadrícula se puede cambiar de tamaño cambiando el tamaño de la ventana, pero esto hace que la geometría de cada artilugio se modifique (perdiendo ‘cuadrado’).

Asi que; ¿dónde y cómo coloco estas restricciones geométricas?
No puede estar solo en el archivo html, ya que no tiene conocimiento del recuento de filas / columnas, por lo que no sabe cuál es el mejor tamaño para crear el Applet.
Sin embargo, no sé cómo configurar el tamaño en el GridLayout o el Panel que lo contiene, ya que debe conocer el tamaño de página del navegador de visualización (para hacerlo lo más grande posible) y tengo la impresión de que el html la geometría especificada anula el Applet especificado.

EDITAR:
Intentando implementar la sugerencia de Andrew;

 screen = new JPanel(new GridLayout(rows, columns)) { public Dimension getPreferredSize() { Dimension expected = super.getPreferredSize(); // calculate preferred size using expected, rows, columns return new Dimension(100, 100) // testing } public Dimension getSize() { return getPreferredSize(); } }; 

Entiendo que esto ignora el “tamaño mínimo”, pero eso no importa en este momento.
La pantalla se coloca en el centro de un diseño de borde, que contiene otros widgets

 getContentPane().add(screen, BorderLayout.CENTER); getContentPane().add(otherWidgets, BorderLayout.PAGE_END); 

Sé que esto no hace que la screen centre en el espacio que tiene, pero eso no es del todo necesario en este momento, así que quiero que todo sea lo más simple posible.

Esto no está funcionando del todo; no hay diferencia visible de lo que tenía antes (cuando se ve a través de Eclipse, aún no he llegado al estado html), exceptuando el tamaño mínimo. El componente de pantalla todavía está siendo redimensionado por el applet en el momento oportuno, lo que hace que las celdas sean ‘no cuadradas’. ¿Qué estoy haciendo mal?

Coloque el contenedor de disposición de cuadrícula en una disposición de bolsa de rejilla como el único componente sin restricción, como se ve en esta respuesta . Eso lo centrará.

Actualizar

Y, por supuesto, colóquelo en un componente que devuelva un tamaño preferido que iguale al tamaño máximo cuadrado que puede administrar según el tamaño principal. Tal como en SquarePanel .

SquarePanel

 import java.awt.*; import javax.swing.*; import javax.swing.border.EmptyBorder; /** * A square panel for rendering. NOTE: To work correctly, this must be the only * component in a parent with a layout that allows the child to decide the size. */ class SquarePanel extends JPanel { @Override public Dimension getPreferredSize() { Dimension d = super.getPreferredSize(); System.out.println("Preferred Size: " + d); int w = (int) d.getWidth(); int h = (int) d.getHeight(); // Set s to the larger of the mimimum component width or height int s = (w > h ? w : h); Container c = getParent(); if (c != null ){ Dimension sz = c.getSize(); if ( d.getWidth()