- AWT, override
paint(). - Swing top-level container (e.g.s are
JFrame,JWindow,JDialog,JApplet..), overridepaint(). But there are a number of good reasons not to paint in a TLC. A subject for a separate question, perhaps. - The rest of Swing (any component that derives from
JComponent), overridepaintComponent(). - Neither override nor explicitly call
paintComponents(), leave it to the API to call it when needed.
Be sure to also use @Override notation whenever overriding a method.
Doing so would hint at the problem of trying to override paintComponent(..) in a JFrame (it has no such method), which is quite common to see.