In case you've been living on a deserted mainframe for the last two years, let's start with what Swing is. First there was AWT, the Abstract Windowing Toolkit, which shipped with JDK 1.0. JDK 1.1 changed the event model, but left the widget set basically intact.
Swing is a radical rewrite of the widget set.
However, everything that sits on top of those classes has been, not rewritten, but written again. For a number of reasons, the designers of AWT used a so-called peer architecture to implement the core components. Since the OS is dealing with all the drawing and event-processing, if you wanted to design, say, a button with an icon on it, you would have to build it from scratch. These basic widgets all share a solid foundation of common functionality, as well as possessing many new features. JButtons and JLabels can contain icons, built from GIF files, in any orientation.