Java Foundation Classes
# Java Foundation Classes

Die Java Foundation Classes (JFC) sind ein Framework zur Erstellung grafischer Benutzeroberflächen in Java. Die Java Foundation Classes werden durch folgende Features definiert: Swing-GUI-Komponenten, Pluggable Look-and-Feel Support, Accessibility, Java 2D und Internationalisierung (i18n). Gemeinsam stellen diese die Basis für plattformunabhängige Smart Client Java GUIs, unabhängig davon, ob das darunterliegende Betriebssystem Windows, Sun Solaris oder Linux ist. Für die meisten aktuellen Betriebssysteme gibt es ebenfalls Implementierungen.

## Bestandteile

Die Java Foundation Classes werden in mehreren APIs implementiert:
* Swing GUI Komponenten & Pluggable Look-and-Feel Support – Swing
* Basis für Swing-Komponenten sowie LayoutManager – Abstract Window Toolkit (AWT)
* Darstellung & Modifikation 2-dimensionaler Objekte – Java 2D
* Accessibility – Java Accessibility API (JAAPI) und spezielle Erweiterungen in Swing Komponenten
* Internationalisierung – java.util, java.text, Input Method Framework

## Differenzierung

Die Java Foundation Classes machen einen Teil der Java Desktop APIs aus und werden oft synonym mit Java Desktop verwendet. Zu den Java Desktop APIs werden aber zusätzlich zu den obengenannten APIs noch folgende gezählt:
* Java Web Start / Java Network Launching Protocol (JNLP) – Deployment von Java-Applikationen über Browser
* Java PlugIn – Plugin von Java für Browser
* Java 3D – 3D für Java Applikationen
* Java Sound
* Java Bindings for OpenGL (JOGL)
* Java Advanced Imaging (JAI)
* JavaBeans
* JavaHelp System – Einbindung von Online-Hilfe in Java-Applikationen
* JDesktop Integration Components (JDIC)
Die Java Foundation Classes (und auch die Java Desktop APIs) überschneiden sich mit den Java Media APIs. Diese enthalten folgende Teile:
* Java 2D
* Java 3D
* Java Advanced Imaging (JAI)
* Java Bindings for OpenGL (JOGL)
* Java Image I/O API
* Java Media Framework (JMF)

## Geschichte

AWT, die damals einzige Möglichkeit um Benutzeroberflächen zu gestalten, wurde in den ersten Jahren der Existenz von Java stark kritisiert. Es ist nur wenig mehr als ein Wrapper um die nativen Grafikfähigkeiten der Plattformen, auf denen Java läuft. Es konnte somit nicht mehr, als die jeweilige Plattform bot, und machte es notwendig, dass die Entwickler auf die Unterschiede der Plattformen eingingen.
Alternative Grafikbibliotheken wie die Internet Foundation Classes (IFC) von Netscape oder die Application Foundation Classes (AFC) von Microsoft wurden entwickelt.
Schlussendlich kündigten Sun und Netscape am 2. April 1997 an, die Internet Foundation Classes, verknüpft mit anderen Technologien und erweitert um die Fähigkeit von Pluggable Look-and-Feels, unter dem Namen „Java Foundation Classes“ herauszubringen. Swing wurde erstmals Ende 1997 mit dem JDK 1.1.5 als externe Bibliothek ausgeliefert, die Java Foundation Classes sind seit JDK 1.2 („Java 2“) Ende 1998 fester Bestandteil der Java-Laufzeitumgebung.
Die Veröffentlichung der Java Foundation Classes machte andere Ansätze zur Darstellung von Java GUIs, somit auch die Internet Foundation Classes und die Application Foundation Classes, obsolet.