Java Foundation Classes (JFC) su softverske komponente za višekratnu upotrebu koje se mogu koristiti za izgradnju grafičkog korisničkog sučelja u Java® aplikaciji. Oni su poboljšanje alata koji se isporučuje s ranim verzijama Jave®. Namjera im je pojednostaviti razvoj softvera, skratiti vrijeme programiranja i ispuniti cilj stvaranja aplikacija koje izgledaju i djeluju jednako bez obzira na vrstu računala na kojem se pokreću.
JFC-ovi su skup komponenti korisničkog sučelja koje se proširuju na Abstract Window Toolkit (AWT) koji je izvorno bio isporučen s programskim jezikom Java®. To su komponente JavaBeans™ koje su dio Jave 2® i dizajnirane su da budu višeplatformski i prilagodljive. Namijenjeni su smanjenju vremena programiranja pružanjem komponenti koje se mogu ponovno koristiti od aplikacije do aplikacije i od platforme do platforme. Java Foundation Classes zapravo ne zamjenjuju Abstract Window Toolkit, već su umjesto toga njegov dio. Oni, međutim, omogućuju Java® ideal “napiši jednom, pokreni bilo gdje” potpunije od originalnog AWT-a.
AWT omogućuje dizajn korisničkog sučelja, ali to čini pomoću prozorskog sustava operacijskog sustava na kojem je pokrenut. To otežava stvaranje aplikacija koje izgledaju i ponašaju se isto na bilo kojoj platformi, zbog inherentnih razlika u značajkama između operacijskih sustava. AWT je također bio vrlo ograničen jer skup kontrola koje je pružao nije bio dovoljno širok za stvaranje složenih korisničkih sučelja i naprednih softverskih aplikacija. AWT komponente su ono što Sun Microsystems naziva “teškim” jer koriste sustav prozora hosta.
Prepoznajući ograničenja AWT-a, Netscape programeri su stvorili skup komponenti nazvanih Internet Foundation Classes. To je bio skup “lakih” komponenti, komponenti napisanih izvorno u Javi®. To je proširilo funkcionalnost AWT-a i omogućilo programerima da stvore korisnička sučelja koja su zadržala svoj izgled kada se izvode na različitim platformama. JavaSoft je tada započeo zajednički projekt s Netscapeom, nazvan projekt Swing. Ovaj projekt je rezultirao skupom kontrola korisničkog sučelja s raznolikošću usporedivim s onima dostupnim na bilo kojoj platformi operacijskog sustava.
Swing je skup lakih komponenti koje je Sun objavio javnosti u kombinaciji s nekoliko drugih poboljšanja značajki koja su bila namijenjena za Java Development Kit (JDK) verziju 1.2. Ovaj paket Swinga i drugih poboljšanja značajki je ono što je JavaSoft nazvao Java Foundation Classes. Kontrole korisničkog sučelja Swing glavni su dio Java Foundation klasa, koje također uključuju, između ostalih stavki, ispis, međuspremnik i funkcije pristupačnosti. JDK 1.2 uključuje punu verziju JFC-a, iako je dostupna ograničena verzija koja se može koristiti s tada aktualnim JDK 1.1.