GridLayout будет изменять размер всех компонентов, чтобы заполнить доступное пространство.Таким образом, если размеры ваших 3 компонентов изображения составляют 50x50, 50x50 и 75x75, все они будут иметь размеры 75x75.Оттуда это до ImageComponent, как он рисует сам.
Скорее всего, ImageComponent реализует paintComponent что-то вроде этого:
protected void paintComponent(Graphics g) {
g.drawImage(image, 0, 0, this);
}
Это будет рисовать изображение в левом верхнем углу, не по центру.
Это будет рисовать центрированное изображение:
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
int iw = image.getWidth(this);
int ih = image.getHeight(this);
if (iw != -1 && ih != -1)
{
int w = getWidth();
int h = getHeight();
g.drawImage(image, (w -iw)/2, (h-ih)/2, this);
}
}