You should not extend the JFrame class unnecessarily (only if you are adding extra functionality to the JFrame class)
JFrame:
JFrame extends Component and Container.
It is a top level container used to represent the minimum requirements for a window. This includes Borders, resizability (is the JFrame resizeable?), title bar, controls (minimize/maximize allowed?), and event handlers for various Events like windowClose, windowOpened etc.
JPanel:
JPanel extends Component, Container and JComponent
It is a generic class used to group other Components together.
-
It is useful when working with
LayoutManagers e.g.GridLayoutf.i adding components to differentJPanels which will then be added to theJFrameto create the gui. It will be more manageable in terms ofLayoutand re-usability. -
It is also useful for when painting/drawing in Swing, you would override
paintComponent(..)and of course have the full joys of double buffering.
A Swing GUI cannot exist without a top level container like (JWindow, Window, JFrame Frame or Applet), while it may exist without JPanels.