Java 提供了兩套 GUI 工具包:AWT(Abstract Window Toolkit) 依賴本地系統原生組件,重量級、跨平台一致性差;Swing 純 Java 實現,輕量級、可插拔外觀,是現代 Java 桌面開發主流。本文以最基礎的 Frame 為例,演示視窗創建、尺寸定位、布局管理、組件添加與顯示的完整流程。
java.awt.Frame:頂級視窗容器,擁有標題欄、邊框、最小化/最大化/關閉按鈕。java.awt.Button:基礎按鈕組件(AWT 版)。java.awt.FlowLayout:流式布局管理器,組件按添加順序左到右、上到下排列。Frame frame = new Frame("我是視窗標題");frame.setSize(400, 300); // 寬 400px,高 300pxframe.setLocation(500, 200); // 屏幕座標 (500, 200)frame.setLayout(new FlowLayout());Button button = new Button("按鈕");
frame.add(button);
frame.setVisible(true); // 關鍵:使視窗可見,啟動事件分發線程
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
public class GuiDemo {
public static void main(String[] args) {
Frame frame = new Frame("我是視窗");
frame.setSize(400, 300);
frame.setLocation(500, 200);
frame.setLayout(new FlowLayout());
Button button = new Button("按鈕");
frame.add(button);
frame.setVisible(true);
}
}

執行後會彈出一個標題為「我是視窗」的桌面視窗,內含一個「按鈕」。值得注意的是:調用 setVisible(true) 後,主線程(main)雖然結束,但程序不會退出,因為 AWT/Swing 內部啟動了事件分發線程(Event Dispatch Thread, EDT) 專門處理繪製、事件循環,這是一個非守護線程,會一直存活直到所有視窗關閉或調用 System.exit()。
paintComponent(Graphics g),雙緩衝防閃爍。