Klasy Java Foundation Classes (JFC) to składniki oprogramowania wielokrotnego użytku, których można używać do tworzenia graficznego interfejsu użytkownika w aplikacji Java®. Stanowią one ulepszenie zestawu narzędzi dostarczanego z wczesnymi wersjami Java®. Mają one na celu uproszczenie tworzenia oprogramowania, skrócenie czasu programowania i realizację celu, jakim jest tworzenie aplikacji, które wyglądają i działają tak samo bez względu na typ komputera, na którym są uruchamiane.
JFC to zestaw komponentów interfejsu użytkownika, które rozwijają się w pakiecie Abstract Window Toolkit (AWT), który pierwotnie był dostarczany z językiem programowania Java®. Są to komponenty JavaBeans™, które są częścią Java 2® i zostały zaprojektowane z myślą o działaniu międzyplatformowym i dostosowywaniu. Mają na celu skrócenie czasu programowania poprzez dostarczanie komponentów, które mogą być ponownie wykorzystywane od aplikacji do aplikacji i od platformy do platformy. Klasy Java Foundation w rzeczywistości nie zastępują zestawu narzędzi abstrakcyjnych okien, ale są jego częścią. Umożliwiają jednak realizację ideału Javy® „napisz raz, uruchom w dowolnym miejscu” w sposób bardziej kompletny niż oryginalny AWT.
AWT umożliwia projektowanie interfejsu użytkownika, ale robi to przy użyciu systemu okienkowego systemu operacyjnego, na którym jest uruchomiony. Utrudnia to tworzenie aplikacji, które wyglądają i zachowują się tak samo na dowolnej platformie, ze względu na nieodłączne różnice w funkcjach między systemami operacyjnymi. AWT był również bardzo ograniczony, ponieważ zestaw elementów sterujących, które zapewniał, nie był wystarczająco szeroki, aby tworzyć złożone interfejsy użytkownika i zaawansowane aplikacje. Komponenty AWT są tym, co Sun Microsystems nazywa „ciężką wagą”, ponieważ wykorzystują system okienek hosta.
Uznając ograniczenia AWT, programiści Netscape stworzyli zestaw komponentów zwanych klasami Internet Foundation Classes. Był to zestaw „lekkich” komponentów, komponentów napisanych natywnie w Javie®. Rozszerzyło to funkcjonalność AWT i umożliwiło programistom tworzenie interfejsów użytkownika, które zachowywały swój wygląd podczas uruchamiania na różnych platformach. Następnie JavaSoft rozpoczął wspólny projekt z firmą Netscape, nazwany projektem Swing. Ten projekt zaowocował zestawem kontrolek interfejsu użytkownika o różnorodności porównywalnej do tej dostępnej z dowolnej platformy systemu operacyjnego.
Swing to zestaw lekkich komponentów, które firma Sun udostępniła publicznie w połączeniu z kilkoma innymi ulepszeniami funkcji, które były przeznaczone dla pakietu Java Development Kit (JDK) w wersji 1.2. Ten pakiet Swing oraz inne ulepszenia funkcji były tym, co JavaSoft nazwał klasami Java Foundation Classes. Kontrolki interfejsu użytkownika Swing są główną częścią klas Java Foundation Classes, które obejmują między innymi funkcje drukowania, schowka i ułatwień dostępu. JDK 1.2 zawiera pełną wersję JFC, chociaż udostępniono wersję ograniczoną, która może być używana z ówczesnym JDK 1.1.