JAVA 圖形界面編程 AWT篇(1)

前言

為了應對JAVA課設,小編走上了java的圖形界面編程的道路,通過博客分享自己的學習歷程,并進行筆記的記錄。

AWT(Abstract Window Toolkit)介紹

AWT(抽象窗口工具包)是 Java 最早的圖形用戶界面(GUI)框架之一,主要用于構建桌面應用程序的圖形界面。最初在 JDK 1.0 版本中作為 Java GUI 的核心庫引入,旨在提供一個跨平臺的圖形用戶界面工具包。

AWT 的最大特點是 平臺依賴性,即它依賴于底層操作系統的窗口系統來創建和渲染界面組件。由于這一點,AWT 的組件在不同操作系統上可能表現出不同的外觀和行為。

后續我們將介紹基于純JAVA實現的swing、

盡管如此,AWT 仍然是 Java 圖形界面編程的重要部分,尤其是在較老的 Java 應用程序中。

AWT 主要特性

  1. 基于操作系統的原生組件: AWT 中的組件是 重量級組件(heavyweight components),即它們直接依賴于底層操作系統的窗口系統(如 Windows 或 X11)。這導致 AWT 的外觀和行為通常會隨平臺的不同而有所不同。

  2. 事件驅動模型: AWT 使用事件驅動編程模型來響應用戶的輸入。開發者通過事件監聽器處理鼠標、鍵盤等輸入事件。這一機制使得 AWT 能夠提供交互式的界面。

  3. 跨平臺: AWT 提供了跨平臺的圖形界面組件,但由于它依賴于底層操作系統的窗口組件,所以它的表現和外觀會受到操作系統的影響。

  4. 簡單的布局管理器: AWT 提供了多種布局管理器(如 FlowLayoutBorderLayoutGridLayout),用于幫助開發者控制組件在容器中的布局。

  5. 低級圖形支持: AWT 提供了對基本圖形(如線條、矩形、圓形、文本)的支持,開發者可以在窗口中繪制簡單的圖形。

AWT 繼承體系

AWT 的繼承體系可以從幾個核心類開始理解,主要的類包括 ComponentContainerWindow 等,這些類通過繼承關系形成了 AWT 組件的層次結構。

AWT 繼承體系結構圖

                                Object|java.awt.Component/        |         \java.awt.Container  java.awt.Window|java.awt.Frame|java.awt.Panel

1. Object

  • 所有 Java 類的祖先類。

2. java.awt.Component

  • Component 是 AWT 類庫中所有圖形組件的基類,幾乎所有的圖形組件(如按鈕、文本框、標簽等)都直接或間接地繼承自 Component 類。
  • Component 類提供了處理圖形組件的位置、大小、繪制、事件等功能。
  • 關鍵方法:
    • setSize(int width, int height):設置組件的大小。
    • setLocation(int x, int y):設置組件的位置。
    • paint(Graphics g):重繪組件的方法,通常用于自定義組件的外觀。
    • addActionListener(ActionListener listener):添加事件監聽器。

3. java.awt.Container

  • Container 類是 Component 的子類,表示可以包含其他組件的容器。它本身不能單獨顯示,但可以用來容納其他組件(如 ButtonLabel 等)。容器本身不直接顯示內容,而是管理其他組件的布局。
  • 容器類主要用于管理和顯示多個子組件。
  • 關鍵方法:
    • add(Component comp):將組件添加到容器中。
    • setLayout(LayoutManager mgr):設置容器的布局管理器。
  • 常見的容器類
    • Frame:代表一個應用程序的主窗口,通常包含標題欄和菜單欄。
    • Panel:面板,允許將多個組件組合成一個區域。
    • Dialog:對話框,通常用于顯示消息或獲取用戶輸入。
    • ScrollPane:具有滾動條的容器。

4. java.awt.Window

  • Window 類是 Component 的直接子類,它表示一個頂級窗口或對話框。在 AWT 中,所有的頂級窗口(如 FrameDialog)都繼承自 Window 類。
  • 關鍵方法:
    • setVisible(boolean b):控制窗口的可見性。
    • setSize(int width, int height):設置窗口的大小。
    • setLocation(int x, int y):設置窗口的位置。
  • 常見的 Window 類子類
    • Frame:代表一個具有邊框和標題的主窗口。
    • Dialog:代表一個彈出式對話框窗口。

5. java.awt.Frame

  • FrameWindow 類的一個子類,表示一個具有邊框和標題欄的窗口。它通常是一個應用程序的主窗口。
  • Frame 類提供了用于管理應用窗口的各種功能,如關閉窗口、設置大小、設置菜單等。
  • 關鍵方法:
    • setTitle(String title):設置窗口的標題。
    • setMenuBar(MenuBar mb):設置窗口的菜單欄。
    • addWindowListener(WindowListener listener):添加窗口事件監聽器。

6. java.awt.Panel

  • PanelContainer 的一個子類,表示一個沒有邊框的面板,通常用于容納多個組件。面板常用于組織窗口中的布局和設計。
  • 它允許對組件進行布局,并且是一個容器,通常用于構建更復雜的用戶界面。
  • 關鍵方法:
    • setLayout(LayoutManager mgr):設置面板的布局管理器。

AWT 組件的繼承體系總結

  • 所有 AWT 組件最終都繼承自 java.awt.Component
  • 容器 是繼承自 Container 類的,容器負責管理和布局其中的組件。
  • 頂級窗口(如 FrameDialog)繼承自 Window 類,它們都是 Component 的直接或間接子類。
  • 通過繼承關系,開發者可以自定義自己的 GUI 組件,繼承 ComponentContainer 類,并在其中實現自定義的繪制或布局功能。

AWT 組件

AWT 包括多種用于構建 GUI 的組件(如按鈕、文本框、標簽等)。這些組件在 AWT 中都是類的實例,通常需要添加到容器(如 FramePanel)中。

1. 頂級容器
  • Frame:代表應用程序的主窗口。一個應用程序通常只有一個 Frame
  • Dialog:表示一個對話框窗口,用于顯示提示或接受用戶輸入。
  • FileDialog:用于文件選擇的對話框。
  • Window:一個頂級窗口的類,可以用于創建無邊框的窗口。
2. 組件
  • Button:按鈕組件。
  • Label:標簽組件,用于顯示文本。
  • TextField:文本輸入框,用于單行文本輸入。
  • TextArea:文本區域,用于多行文本輸入。
  • CheckBox:復選框,用于選擇項。
  • RadioButton:單選按鈕,用于在多個選項中選擇一個。
  • List:列表組件,用于顯示項目的列表。
  • Choice:下拉列表框。
  • Scrollbar:滾動條組件。
  • MenuMenuItem:菜單及菜單項組件。
3. 布局管理器
  • FlowLayout:組件按順序排列,默認從左到右排列。
  • BorderLayout:將容器分為五個區域:北(NORTH)、南(SOUTH)、東(EAST)、西(WEST)、中(CENTER)。
  • GridLayout:以網格的方式排列組件,所有單元格大小相同。
  • CardLayout:類似卡片的布局,允許容器中顯示一個組件的“卡片”。
  • GridBagLayout:更靈活的網格布局,可以調整組件的大小和位置。
4. 事件模型
  • ActionListener:響應按鈕、菜單等可觸發動作的組件。
  • MouseListener:響應鼠標事件。
  • KeyListener:響應鍵盤事件。
  • WindowListener:響應窗口的打開、關閉、激活等事件。
  • ItemListener:響應復選框、單選按鈕等的狀態改變。

一個簡單的程序

import java.awt.*;
import java.awt.event.*;public class SimpleAWTApp {public static void main(String[] args) {// 創建一個 Frame 對象Frame frame = new Frame("AWT 示例");// 創建按鈕并設置點擊事件Button button = new Button("點擊我");button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {System.out.println("按鈕被點擊");}});// 創建文本框TextField textField = new TextField("請輸入文本");// 設置布局管理器為 FlowLayoutframe.setLayout(new FlowLayout());// 將組件添加到 frame 中frame.add(button);frame.add(textField);// 設置 frame 大小frame.setSize(300, 200);// 設置關閉操作frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});// 顯示 frameframe.setVisible(true);}
}

結束語

下節開始我們將對相關組件進行介紹!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62694.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62694.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62694.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vulhub復現CVE-2021-44228log4j漏洞

目錄 一:漏洞概述 二:漏洞原理 三:漏洞利用 lookup功能: JNDI解析器: ldap服務: RMI: 四:漏洞復現 4.1靶場 4.2dnslog測試 4.3部署jndi-injection-exploit 4.4打開監聽端口 4.5觸發請…

ip地址獲取失敗啥意思?ip地址獲取失敗怎么回事

在日常的網絡使用中,我們時常依賴于穩定的IP地址來確保數據的順暢傳輸和設備的正常識別。然而,有時我們會遇到“IP地址獲取失敗”的困擾,這不僅阻礙了我們的網絡訪問,還可能帶來一系列的網絡連接問題。那么,IP地址獲取…

如何在 Android 項目中實現跨庫傳值

背景介紹 在一個復雜的 Android 項目中,我們通常會有多個庫(lib),而主應用程序(app)依賴所有這些庫。目前遇到的問題是,在這些庫中,libAd 需要獲取 libVip 的 VIP 等級狀態&#xf…

非常規使用client-go踩坑記

0x01 背景 編程者總有想偷懶的傾向。至少我的初衷時,盡量復用現有的代碼。但有時也會變得弄巧成拙。 這不,最近需要在一個Go服務里添加一個CRD的緩存等待。熟悉k8s的同學都知道,向 kube-apiserver 提交一個更新,到同一個進程中的…

OpenGL ES詳解——多個紋理實現混疊顯示

目錄 一、獲取圖片紋理數據 二、著色器編寫 1. 頂點著色器 2. 片元著色器 三、綁定和繪制紋理 1. 綁定紋理 2. 繪制紋理 四、源碼下載 一、獲取圖片紋理數據 獲取圖片紋理數據代碼如下: //獲取圖片1紋理數據 mTextureId loadTexture(mContext, R.mipmap.…

java引用相關(四大引用類型,軟引用避免oom,弱引用表,虛引用和引用隊列,可達性分析算法)

1. 什么是引用? 問題:什么是引用?Java中的引用是如何工作的? 答案: 引用 是對象的句柄,用于訪問堆內存中的對象。在Java中,引用變量實際上存儲的是對象的地址,而不是對象本身。通…

十一、容器化 vs 虛擬化-Docker

文章目錄 前言一、Docker 介紹1. 簡介2. 應用場景3. 特點4. Docker和虛擬機之間的區別5. 解決痛點1. 解決依賴兼容2. 解決操作系統環境差異3. 小結 二、Docker 架構三、工作流程五、Docker 核心組件及其工作機制1. Docker 客戶端(Docker Client)2. Docke…

linux學習筆記01 基礎命令

目錄 創建 touch 創建文件 (創建但是不打開) vi / vim 創建文件 (創建一個文件并打開) mkdir 創建文件夾 切換目錄 cd 查看 pwd 查看當前目錄完整路徑 ls 查看目錄信息 dir 查看目錄信息 ll 表示查看目標目錄下的信息 ls -a 查看當前目錄下的…

【深度學習】深刻理解多模態模型CLIP

CLIP(Contrastive Language-Image Pretraining) 是由 OpenAI 提出的一個多模態模型,旨在學習視覺和語言的聯合表示,能夠通過圖像和文本之間的對比學習來實現圖像和文本之間的緊密聯系。CLIP 模型可以通過自然語言描述理解和處理圖…

android 聊天界面鍵盤、表情切換絲滑

1、我們在聊天頁面時候,往往會遇到,鍵盤、表情、其他選擇切換時候頁面會出現掉下來再彈起問題,這是因為,我們切換時候,鍵盤異步導致內容View高度變化,頁面掉下來后,又被其他內容頂起這種很差視覺…

Nginx 緩存系統 proxy_cache詳解

系列文章目錄 提示:這里可以添加系列文章的所有文章的目錄,目錄需要自己手動添加 例如:第一章 Python 機器學習入門之pandas的使用 提示:寫完文章后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目…

mysql時間戳格式化yyyy-mm-dd

格式化到 年月日 # 將時間換成列名就行;當前是秒級時間戳,如果是毫秒的 / 1000即可 # SELECT FROM_UNIXTIME(1602668106666.777888999 / 1000,%Y-%m-%d) AS a; # SELECT FROM_UNIXTIME(列名 / 1000,%Y-%m-%d) AS a; SELECT FROM_UNIXTIME(1602668106.666…

PDFMathTranslate,PDF多語言翻譯,批量處理,學術論文,雙語對照(WIN/MAC)

分享一個非常實用的PDF文檔翻譯項目——PDFMathTranslate。作為一個經常逛GitHub的開發者,我總喜歡翻看各種項目附帶的論文,雖然大多時候是瞎研究,但卻樂在其中。該項目能夠完美保留公式、圖表、目錄和注釋,對于需要閱讀外文文獻的…

網絡藥理學:(待更)Alphafold3和批量分子動力學模擬(Desmond、AutoMD)

批量動力學模擬 注意全都需要在類linux平臺上進行 安裝Desmond模塊: https://github.com/Wang-Lin-boop/Schrodinger-Script 安裝AutoMD模塊: Wang-Lin-boop/CADD-Scripts: Scripts for virtual screening, cross docking and protein relax using Sc…

爬蟲基礎之代理的基本原理

在做爬蟲的過程中經常會遇到一種情況,就是爬蟲最初是正常運行、正常抓取數據的,一切看起來都是那么美好,然而一杯茶的工夫就出現了錯誤,例如 403 Forbidden,這時打開網頁一看,可能會看到“您的IP訪問頻率太…

第十七屆山東省職業院校技能大賽 中職組“網絡安全”賽項資源任務書樣題③

第十七屆山東省職業院校技能大賽 中職組“網絡安全”賽項資源任務書樣題③ 模塊A 基礎設施設置與安全加固(200分)A-1 登錄安全加固(Windows, Linux)A-2 Nginx安全策略(Linux)A-3日志監控(Windows)A-4中間件…

鯤鵬麒麟安裝Kafka-v1.1.1

因項目需要在鯤鵬麒麟服務器上安裝Kafka v1.1.1,因此這里將安裝配置過程記錄下來。 環境說明 # 查看系統相關詳細信息 [roottest kafka_2.12-1.1.1]# uname -a Linux test.novalocal 4.19.148 #1 SMP Mon Oct 5 22:04:46 EDT 2020 aarch64 aarch64 aarch64 GNU/Li…

群控系統服務端開發模式-應用開發-登錄退出發送郵件

一、登錄成功發送郵件 在根目錄下app文件夾下controller文件夾下common文件夾下&#xff0c;修改Login.php&#xff0c;代碼如下 <?php /*** 登錄退出操作* User: 龍哥三年風水* Date: 2024/10/29* Time: 15:53*/ namespace app\controller\common; use app\controller\Em…

[游戲開發] Unity中使用FlatBuffer

什么是FlatBuffer 官網&#xff1a; GitHub - google/flatbuffers: FlatBuffers: Memory Efficient Serialization LibraryFlatBuffers: Memory Efficient Serialization Library - google/flatbuffershttps://github.com/google/flatbuffers 為什么用FloatBuffer&#xff0c…

MySQL其一,概念學習,可視化軟件安裝以及增刪改查語句

目錄 MySQL 1、數據庫的概念 2、數據庫分類 3、MySQL的安裝 4、安裝過程中的問題 DataGrip的使用&#xff1a; SQLynx的使用&#xff1a; 5、編寫SQL語句 6、DDL語句 7、DML 新增數據&#xff1a; 刪除數據&#xff1a; 修改數據&#xff1a; MySQL SQL其實是一門…