Difference between paint, paintComponent and paintComponents in Swing

java, paintcomponent, swing

Solution

- AWT, override `paint()`.

- Swing top-level container (e.g.s are `JFrame`, `JWindow`, `JDialog`, `JApplet` ..), override `paint()`. 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`), override `paintComponent()`.

- 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.

Problem

What is the actual difference between `paint()`, `paintComponent()` and `paintComponents()` in Java Swing? I tried to understand what explained in Oracle docs but I am not clear.

Original source