The Java Foundation Classes or JFC was first introduced soon after the release of the Java 1.0.7 specification. It was originally a 'just for kicks' project to see if the Java framework could handle more of the key GUI elelments without the aid of the AWT. It was improved, and by Java 1.1.7, was a very cool thing for both the users and the developers.

For users it offered a truly consistant look and feel across all platforms because it was drawing it's own controls and not using the OS Supplied widgets. So the interface would look and behave almost identically whether run on win32 or Solaris or whatever.

For the developers it also offered a consistancy that was not available under the AWT -- every widget behaved the same way under every platform -- no matter where the app was run, you could interface witht he GUI objects in the same way and they were nearly guaranteed to have the same properties.

By building their own widgets, this also allowed more and diverse GUI objexts to be constructed -- like TextArea's with HTML Rendering capabilities and multi-state button controls and the like.

The downsides are also there, however, and the main one being that of performance. It takes a lot of horsepower to draw those buttons, especially when they're being draw using code that is interpretted rather that nativly compiled. Now, with todays fast machines it's not a bit issue, but with slower designes, like embedded systems, it degrades speed by several orders.

The JFC's were originally know as project Swing, but that name was changed after they stopped being just a toy and turned into a viable product. Although it started out as a separate package, the JFC framework is, as of Java 1.2 (Java 2), integrated into the JVM so there is a marked speed increase.