Java Foundation Classes (JFC) sunt componente software reutilizabile care pot fi folosite pentru a construi o interfață grafică cu utilizatorul într-o aplicație Java®. Acestea reprezintă o îmbunătățire a setului de instrumente livrat cu versiunile inițiale de Java®. Acestea sunt menite să simplifice dezvoltarea software-ului, să scurteze timpul de programare și să îndeplinească scopul de a crea aplicații care arată și acționează la fel, indiferent de tipul de computer pe care sunt rulate.
JFC-urile sunt un set de componente de interfață cu utilizatorul care se extind pe Abstract Window Toolkit (AWT) care a fost furnizat inițial cu limbajul de programare Java®. Sunt componente JavaBeans™ care fac parte din Java 2® și sunt proiectate pentru a fi multiplatforme și personalizabile. Acestea sunt menite să reducă timpul de programare prin furnizarea de componente care pot fi reutilizate de la aplicație la aplicație și de la platformă la platformă. Clasele Java Foundation nu înlocuiesc de fapt setul de instrumente Abstract Window, ci sunt în schimb o parte a acestuia. Ele, totuși, permit idealul Java® de „scrie o dată, rulează oriunde” mai complet decât AWT original.
AWT permite proiectarea interfeței cu utilizatorul, dar o face folosind sistemul de ferestre al sistemului de operare pe care rulează. Acest lucru face dificilă crearea de aplicații care arată și se comportă la fel pe orice platformă, din cauza diferențelor inerente de caracteristici între sistemele de operare. AWT a fost, de asemenea, foarte limitat prin faptul că setul de controale pe care îl furniza nu era suficient de larg pentru a crea interfețe de utilizator complexe și aplicații software avansate. Componentele AWT sunt ceea ce Sun Microsystems numește „greutate”, deoarece folosesc sistemul de ferestre gazdă.
Recunoscând limitările AWT, dezvoltatorii Netscape au creat un set de componente numite Internet Foundation Classes. Acestea erau un set de componente „ușoare”, componente scrise nativ în Java®. Acest lucru a extins funcționalitatea AWT și a permis dezvoltatorilor să creeze interfețe de utilizator care și-au păstrat aspectul atunci când sunt rulate pe diferite platforme. JavaSoft a început apoi un proiect comun cu Netscape, numit proiectul Swing. Acest proiect a rezultat într-un set de controale ale interfeței utilizator cu o varietate comparabilă cu cea disponibilă de pe oricare dintre platformele de sistem de operare.
Swing este un set de componente ușoare pe care Sun le-a lansat publicului în combinație cu alte câteva îmbunătățiri ale caracteristicilor care au fost destinate kitului de dezvoltare Java (JDK) versiunea 1.2. Acest pachet de Swing plus alte îmbunătățiri ale caracteristicilor a fost ceea ce JavaSoft a numit Java Foundation Classes. Controalele interfeței cu utilizatorul Swing reprezintă partea majoră a claselor Java Foundation, care includ, printre alte elemente, funcții de imprimare, clipboard și accesibilitate. JDK 1.2 include versiunea completă a JFC, deși a fost pusă la dispoziție o versiune limitată care ar putea fi utilizată cu actualul JDK 1.1.