Convertir un JPanel a una imagen en un JScrollPane

Quiero convertir un JPanel a una imagen. Utilicé el siguiente método:

public BufferedImage createImage(){

    int w = getWidth();
    int h = getHeight();
    BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
    Graphics2D g = bi.createGraphics();
    paint(g);
    return bi;
}

Pero el problema es que el JPanel está contenido dentro de un JScrollPane. Así que cuando convierto el jpanel en una imagen, la imagen solo contiene las partes visibles en el jpanel y las partes que están ocultas dentro del panel de desplazamiento no se encuentran en la imagen.

¿Hay alguna solución para obtener el contenido completo de JPanel en una imagen?

Respuestas a la pregunta(3)

Su respuesta a la pregunta