You can render to an image that will eventually be drawn to the screen whenever you want, but you can't make it actually be drawn to the screen. When you call repaint, it just suggests that the screen be repainted when the AWT Event Thread has time. You could just call paint, but that would really be mixing active and passive rendering. I have a feeling that might be a bad idea.
Swing does cache the whole screen for you. In fact, it has a back buffer for every single Swing Component, which seems excessively wasteful.
I was a bit warped there - that was not the caching I meant, doesn't matter anyways
Profiling shows that 'excessively wasteful' mismatches with what actually is going on.
repaint will cause a paint there are just no guaranties at what point in time or before what death-line. Unless you use a real-time OS even active rendering doesn't give you either. Repaint does 'guaranty' that there will be a repaint, the task doesn't get dropped no matter how stressed the EDT is.
Mixing active and passive rending will work just fine - why wouldn't it passive rendering is basically a optimised version of active rendering. filthy rich clients guys probably used something similar with there glass layer approach. - or they do fire off a zilion events I don't know.