Ao criar um BufferedImage a partir de um JPanel (sem um JFrame), também posso usar um gerenciador de layout?

Eu estou tentando criar um BufferedImage de um JPanel, sem usar um JFrame. Ontem, finalmente consegui que a imagem aparecesse com a ajuda dessa comunidade (veja abaixo), mas agora estou com algum problema de layout. Todos os componentes no BufferedImage começam a desenhar em 0,0, em vez de seguir o gerenciador de layout. Alguém sabe de uma solução para esse problema?

Pergunta de ontem:Posso criar um BufferedImage a partir de um JPanel sem renderizar em um JFrame?

No código abaixo, os dois marcadores substituirão um ao outro no canto superior esquerdo da imagem.

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.image.BufferedImage;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class RenderTest {

        RenderTest() {
        JPanel panel = new JPanel();
        panel.setBackground(Color.RED);
        panel.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
        Dimension dim = new Dimension(150,50);
        panel.setSize(dim);
        panel.setMinimumSize(dim);
        panel.setMaximumSize(dim);
        panel.setPreferredSize(dim);
        JLabel label = new JLabel("hello");
        JLabel label2 = new JLabel(" world");
        label.setSize(label.getPreferredSize());
        label2.setSize(label2.getPreferredSize());
        panel.add(label);
        panel.add(label2);

        BufferedImage bi = getScreenShot(panel);
        JOptionPane.showMessageDialog(null, new JLabel(new ImageIcon(bi)));
    }

    private BufferedImage getScreenShot(JPanel panel){
        BufferedImage bi = new BufferedImage(
            panel.getWidth(), panel.getHeight(), BufferedImage.TYPE_INT_ARGB);
        panel.paint(bi.getGraphics());
        return bi;
    }

    public static void main(String[] args) {
        new RenderTest();
    }
}

questionAnswers(2)

yourAnswerToTheQuestion