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 :响应复选框、单选按钮等的状态改变。

一个简单的程序

```java
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("请输入文本");

        // 设置布局管理器为 FlowLayout
        frame.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);
            }
        });
        // 显示 frame
        frame.setVisible(true);
    }
}

```

结束语

下节开始我们将对相关组件进行介绍!!!

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/4808.html

(0)
LomuLomu
上一篇 2024 年 12 月 29 日 上午2:04
下一篇 2024 年 12 月 30 日 上午1:42

相关推荐

  • JavaCV 图像边缘检测 之 Canny 算法

    # 博主简介 我是**CSDN博客专家**,同时也是**历代文学网**的总架构师,拥有超过**15年**的行业经验。我精通**Java编程**,擅长**高并发系统设计**,对**Springboot和微服务架构**有深入的理解和实践经验。此外,我还熟悉**Linux操作系统**、**ESXI虚拟化技术**,以及**云原生技术栈Docker和Kubernete…

    未分类 2024 年 12 月 27 日
    51300
  • Java MDC技术详解:实现高效日志链路追踪的实战指南

    一、MDC技术概述 MDC(映射诊断上下文)是SLF4J日志框架提供的一项线程级数据存储功能。作为线程安全的容器,它能够在特定线程范围内保存多组键值数据,并自动将这些信息嵌入日志记录中,从而实现日志信息的上下文关联。 二、MDC的核心价值 功能 描述 应用实例 请求追踪 完整记录请求处理路径 微服务调用链路分析 参数传递 跨方法共享通用数据 机构编码、用户标…

    未分类 2025 年 5 月 19 日
    47500
  • 10个案例告诉你mysql不使用子查询的原因

    大家好,我是V哥。上周末与一位技术同行共进晚餐,我们很快便将话题转向了技术讨论,特别是关于数据库子查询的优化问题。回家后,我整理了以下10个案例,展示了如何在不使用子查询的情况下解决问题,现在与大家分享。 首先,让我们探讨一下在MySQL中避免使用子查询和JOIN的原因,主要基于以下几点: 性能考量:子查询在执行过程中,MySQL需要创建临时表来存储内部查询…

    未分类 2024 年 12 月 26 日
    45300
  • Java刷题常见的集合类,各种函数的使用以及常见的类型转化等等

    目录 前言 集合类 ArrayList 1. 创建和初始化 ArrayList 2.添加元素 add 3.获取元素 get 4.删除元素 remove 5.检查元素 6.遍历 ArrayList LinkedList Stack 1. 创建Stack对象 2. 压入元素 (push) 3. 弹出元素 (pop) 4. 查看栈顶元素 (peek) 5. 检查栈…

    2025 年 1 月 1 日
    64400
  • MySQL

    阿里云社区https://developer.aliyun.com/mirror 目录 一:数据库 1.1 二: MySQL数据库基本操作 2.1 创建数据库: 2.2 使用某个数据库: 2.3 删除数据库: 2.4 查询支持的存储引擎 2.5 创建表: 2.6 查看表结构: 2.7 查看表结构详细信息: 2.8 删除表: 三:表的操作 3.1 修改表名字:…

    未分类 2025 年 1 月 11 日
    41100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信