asclass JVolatileImageSurface > Surface { VolatileImageMakerForComponent volatileImageMaker; settable bool volatileMode = true; abstract void renderVolatile(int w, int h, Graphics2D g); @Override public void render(int w, int h, Graphics2D g) { if (!volatileMode) renderVolatile(w, h, g); else { if (volatileImageMaker == null || !volatileImageMaker.sizeIs(w, h)) volatileImageMaker = new VolatileImageMakerForComponent(this, w, h, (_g, _w, _h) -> renderVolatile(_w, _h, _g)); volatileImageMaker.paintOnScreen(g); } } }