¿Puedo crear un BufferedImage desde un JPanel sin renderizar en un JFrame?

¿Es posible crear un BufferedImage desde un JPanel sin procesarlo primero en un JFrame? He buscado en todas partes que puedo pensar y no puedo encontrar una respuesta. ¿Alguien puede ayudar?

Aquí hay un código de ejemplo. Si no anulo el comentario del código JFrame, mi BufferedImage está en blanco.

    test(){
//      JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        Dimension dim = new Dimension(50,50);
        panel.setMinimumSize(dim);
        panel.setMaximumSize(dim);
        panel.setPreferredSize(dim);
        JLabel label = new JLabel("hello");
        panel.add(label);
//      frame.add(panel);
//      frame.pack();
        BufferedImage bi = getScreenShot(panel);

        //...code that saves bi to a jpg
    }

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta