GUI是由Component,LayoutManager以及Listener所組成的。Component是畫面的主要組成成分,本身並沒有可見的實體,其子類別才有顯現的效果。如果Component可以放入其他的Component,則這種Component就稱為是Container。Container裡面的Component的排放位置,可以用絕對座標,也可以透過LayoutManager加以調整。使用者以Mouse,Keyboard等操作GUI時,會產生相對應的Event,並由視窗系統將該Event傳遞給程式設計者所指定的Listener。例如使用者以Mouse的左鍵按下Button(一種Component)時,視窗系統會將ActionEvent傳給該Button的ActionListener(設計者實作的物件),由ActionListener決定採取的步驟。這種由使用者觸發的執行動作,和程序式語言由主程式開始呼叫其他程序的模式不同,我們稱之為事件驅動(Event Driven)模式。
AWT(Abstract Window Toolkit, java.awt.*)是JDK 1.0所提出來有關GUI的函式庫,在JDK 1.1時又修改了Event Handling的機制, 成為現在的樣子。當初為了快速開發出AWT, 以符合Java出版的時程, 因此在設計上, 是利用視窗系統已有的GUI元件為主。由於Java原始的設計理念具有跨平台的性質, 因此AWT只好取各家視窗系統(Windows,Open Look, Motif, Machintosh)上元件的交集, 因此AWT頗為陽春。
為了彌補AWT的不足, JDK自1.2以後提供新的JFC(Java Foundation Class)/Swing的程式庫(javax.swing)。Swing是以Java語言所寫出來的, 因此提供了更多樣化而複雜的元件, 如Image JButton, Image JLabel, JTree, JTable, JTabbedPane, JPopupMenu等等。而且由於Swing並不依靠底層的視窗系統畫出元件的外觀, 因此Swing可以讓使用者自行選定其所喜愛的look and feel。
為了讓原先使用AWT的應用程式能改用Swing的程式庫, AWT內所有的元件都有相對應以J開頭的Swing元件, 如Button對應JButton, TextField對應JTextField。原先AWT的程式只要把Source Code裡面的AWT元件前面加上J即可, 其餘Event Handling和LayoutManager均可沿用(除了JFrame, JDialog, JApplet, JWindow等最上層的Container不能直接加入元件, 必須透過getContentPane()取得放置的地方)。