Swing widgets provide more sophisticated GUI components than the earlier Abstract Window Toolkit. Since they are written in pure Java, they run the same on all platforms, unlike the AWT which is tied to the underlying platform's windowing system. Swing supports pluggable look and feel – not by using the native platform's facilities, but by roughly emulating them. This means you can get any supported look and feel on any platform. The disadvantage of lightweight components is slower execution. The advantage is uniform behavior on all platforms.
The Internet Foundation Classes (IFC) were a graphics library for Java originally developed by Netscape Communications Corporation and first released on December 16, 1996. IFC was essentially a clone of NeXT Software's Objective-C OpenStep APIs to the Java language. After NeXT was acquired by Apple Computer in December 1996, OpenStep was renamed Cocoa. It continues today as a set of application development frameworks for Apple's Mac OS X operating system.
On April 2, 1997, Sun Microsystems and Netscape Communications Corporation announced their intention to incorporate IFC with other technologies to form the Java Foundation Classes. Unfortunately, as described in The Sun Also Sets, inexperienced engineers at Sun discarded virtually all of the code from IFC, and a similar framework that had been developed at Sun subsidiary Lighthouse Design. As a result, the release of Sun's successor to AWT was delayed by more then eighteen months, and when finally released it was met with widespread criticism and lack of interest. Although Swing has improved in recent years, it is still widely regarded as being difficult to use, in large part because of the decision to abandon the superior technologies derived from NeXT's innovations, and begin again virtually from scratch.
Swing introduced a mechanism that allowed the look and feel of every component in an application to be altered without making substantial changes to the application code. The introduction of support for a pluggable look and feel allowed Swing components to emulate the appearance of native components while still retaining the benefits of platform independence. This feature also makes it easy to have an individual application's appearance look very different from other native programs.
Originally distributed as a separately downloadable library, Swing has been included as part of the Java Standard Edition since release 1.2. The Swing classes are contained in the javax.swing package hierarchy.