首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java AWT 入門:Frame、Panel 與布局管理器詳解

     編輯:Java 綜合教學

Java AWT 入門:Frame、Panel 與布局管理器詳解

AWT(Abstract Window Toolkit)是 Java 早期的 GUI 工具包,提供跨平台的窗口、組件、事件處理與布局管理。本文系統講解 Frame、Panel 核心容器及 FlowLayout、BorderLayout、GridLayout 三大布局管理器,並以計算器界面為綜合實例。

核心概念

  • Component:所有圖形組件基類(Button, Label, TextField 等),封裝大小、位置、顏色、繪圖等通用行為。
  • Container:Component 子類,可容納其他組件。核心子類:Window, Panel, ScrollPane。
  • LayoutManager:控制容器內組件尺寸與位置,實現跨平台自適應布局。

1. Frame:頂級窗口

  • 繼承鏈:Frame -> Window -> Container -> Component
  • 特征:有標題欄、邊框、菜單欄、最小化/最大化/關閉按鈕,可獨立顯示。
  • 默認布局:BorderLayout
  • 關鍵方法:setBounds(x,y,w,h), setTitle(), setBackground(), setVisible(true)
Frame frame = new Frame("我的第一個窗口");
frame.setBounds(50, 50, 300, 200);
frame.setBackground(Color.PINK);
frame.setVisible(true);

2. Panel:面板容器

  • 繼承鏈:Panel -> Container -> Component
  • 特征:無法獨立顯示,必須添加到其他容器(如 Frame、另一 Panel)中。
  • 默認布局:FlowLayout
  • 作用:分組組件、嵌套布局、實現複雜界面結構。
Frame frame = new Frame("Panel 示例");
frame.setBounds(50, 50, 500, 300);
Panel panel = new Panel();
panel.setBackground(Color.PINK);
frame.add(panel); // 添加到 Frame
frame.setVisible(true);

3. 布局管理器詳解

FlowLayout(流式布局)

  • Panel/Applet 默認。
  • 規則:左到右、上到下順序排列;一行放不下換行。
  • 構造:new FlowLayout(align, hgap, vgap),align:LEFT, CENTER, RIGHT。
frame.setLayout(new FlowLayout(FlowLayout.LEFT, 20, 40));

BorderLayout(邊界布局)

  • Window/Frame/Dialog 默認。
  • 五大區域:NORTH, SOUTH, EAST, WEST, CENTER,每區域僅一組件。
  • 添加時指定區域:frame.add(btn, BorderLayout.NORTH)。

GridLayout(網格布局)

  • 組件等寬等高,按行列排列。
  • 構造:new GridLayout(rows, cols, hgap, vgap)。
GridLayout gl = new GridLayout(3, 2, 5, 5); // 3行2列
frame.setLayout(gl);

綜合實例:4x4 計算器界面

public class CalculatorDemo {
    public static void main(String[] args) {
        Frame frame = new Frame("計算器");
        frame.setBounds(100, 100, 300, 420);
        // Frame 默認 BorderLayout

        // 北部:顯示框
        TextField tf = new TextField();
        frame.add(tf, BorderLayout.NORTH);

        // 中部:按鈕面板,使用 GridLayout
        Panel panel = new Panel();
        panel.setLayout(new GridLayout(4, 4, 1, 1));
        frame.add(panel, BorderLayout.CENTER);

        String[] keys = {
            "7", "8", "9", "+",
            "4", "5", "6", "-",
            "1", "2", "3", "*",
            "0", ".", "=", "/"
        };
        for (String key : keys) {
            panel.add(new Button(key));
        }

        frame.setVisible(true);
    }
}

關鍵總結

  1. Frame 是頂級窗口,默認 BorderLayout;Panel 需嵌入容器,默認 FlowLayout。
  2. Panel 作為組件添加到容器後,保留自己的布局管理器,這是實現複雜界面的關鍵(如計算器:Frame 用 BorderLayout,中部 Panel 用 GridLayout)。
  3. 無布局管理器(setLayout(null))需手動調用 setBounds(),會導致平台相關性,不推薦。
  4. AWT 組件為重量級(Peer-based),受限於底層 OS,外觀隨平台變化;Swing/JFX 為輕量級,外觀一致,現代開發建議使用 Swing 或 JavaFX。

遷移建議

  • 新項目優先選擇 JavaFX(模塊化、CSS 樣式、FXML 分離、現代 GPU 渲染)。
  • 維護舊 AWT/Swing 項目時,理解布局嵌套機制對修改界面至關重要。

AWT 雖已非主流,但其「容器-布局-組件」核心模型被 Swing、JavaFX 繼承,掌握 AWT 基礎有助於深度理解 Java GUI 架構演進。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved