Java Foundation Classes (JFC) är återanvändbara programvarukomponenter som kan användas för att bygga ett grafiskt användargränssnitt i en Java®-applikation. De är en förbättring av verktygslådan som levererades med tidiga versioner av Java®. De är avsedda att förenkla mjukvaruutveckling, förkorta programmeringstiden och uppfylla målet att skapa applikationer som ser ut och fungerar likadant oavsett vilken typ av dator de körs på.
JFC:er är en uppsättning användargränssnittskomponenter som expanderar på Abstract Window Toolkit (AWT) som ursprungligen försågs med programmeringsspråket Java®. De är JavaBeans™-komponenter som är en del av Java 2® och är designade för att vara plattformsoberoende och anpassningsbara. De är avsedda att minska programmeringstiden genom att tillhandahålla komponenter som kan återanvändas från applikation till applikation och från plattform till plattform. Java Foundation Classes ersätter faktiskt inte Abstract Window Toolkit utan är istället en del av det. De möjliggör dock Java®-idealet att ”skriva en gång, springa var som helst” mer fullständigt än den ursprungliga AWT.
AWT möjliggör design av användargränssnitt, men den gör det genom att använda fönstersystemet i operativsystemet som det körs på. Detta gör det svårt att skapa applikationer som ser ut och beter sig likadant på vilken plattform som helst, på grund av de inneboende skillnaderna i funktioner mellan operativsystem. AWT var också mycket begränsad på så sätt att uppsättningen kontroller inte var tillräckligt bred för att skapa komplexa användargränssnitt och avancerade mjukvaruapplikationer. AWT-komponenterna är vad Sun Microsystems kallar ”heavyweight” eftersom de använder värdfönstrets system.
Genom att inse begränsningarna hos AWT skapade Netscape-utvecklare en uppsättning komponenter som kallas Internet Foundation Classes. Dessa var en uppsättning ”lätta” komponenter, komponenter skrivna inbyggt i Java®. Detta utökade funktionaliteten hos AWT och gjorde det möjligt för utvecklare att skapa användargränssnitt som behöll sitt utseende när de kördes på olika plattformar. JavaSoft startade sedan ett gemensamt projekt med Netscape, kallat Swing-projektet. Detta projekt resulterade i en uppsättning användargränssnittskontroller med en mängd jämförbar med den som är tillgänglig från någon av operativsystemsplattformarna.
Swing är en uppsättning lättviktskomponenter som Sun släppte till allmänheten i kombination med flera andra funktionsförbättringar som var avsedda för Java Development Kit (JDK) version 1.2. Detta paket med Swing plus andra funktionsförbättringar var vad JavaSoft kallade Java Foundation Classes. Swing-användargränssnittskontrollerna är huvuddelen av Java Foundation-klasserna, som även inkluderar bland annat utskrift, urklipp och tillgänglighetsfunktioner. JDK 1.2 inkluderar den fullständiga versionen av JFC, även om en begränsad version gjordes tillgänglig som kunde användas med den då nuvarande JDK 1.1.