you should never need to call invalidate() by hand, as swing does that for you on pretty much for every property change.
When more than one region within the control needs repainting, Invalidate will cause the entire window to be repainted in a single pass, avoiding flicker caused by redundant repaints.
One of the reason a damaged regions may occur is from the overlapping of a part of your component because of some other component or application.
As per my experience the repaint() is more effective if you call it on the innermost enclosing component (i.e.
If there is some part of component which is being updated (defined by the graphic's clip rectangle, called "damaged" region) then you should consider calling repaint.
Otherwise, this method causes a call to this component's update method as soon as possible. NOTE: Swing processes "repaint" requests in a slightly different way from the AWT, although the final result for the application programmer is essentially the same -- paint() is invoked.
There is no performance penalty for calling Invalidate multiple times before the control is actually repainted.
If the component is a lightweight component, this method causes a call to this component's paint method as soon as possible.
using marks a component as not valid -- that means, it's layout is or may not be "up to date" anymore: i.e.
the component is resized, a border is added, it's font changes, etc.