sclass DesktopPaneWithFitPicture_smooth_cacheScaled extends JDesktopPane { BufferedImage image, originalImage, scaled; *() {} *(BufferedImage *image) {} protected void paintComponent(Graphics g) { if (image == null) { originalImage = scaled = null; } else { Pt size = calcFitSize(image, this); if (image != originalImage || scaled == null || scaled.getWidth() != size.x || scaled.getHeight() != size.y) { _print("Scaling image"); originalImage = image; scaled = resizeImage(image, size.x, size.y); } } paintCenteredBackgroundImage(this, g, scaled); } void setImage(BufferedImage image) { this.image = image; repaint(); } }