当前位置: 首页 > news >正文

深入浅出:AWT的基本组件及其应用

目录

前言

1. AWT简介

2. AWT基本组件

2.1 Button:按钮

2.2 Label:标签

​编辑

2.3 TextField:文本框

2.4 Checkbox:复选框

2.5 Choice:下拉菜单

2.6 List:列表

综合案例 

 注意

3. AWT事件处理

3.1 常见事件监听器

4. 结束语


前言

在Java中,AWT(Abstract Window Toolkit)是最早的图形用户界面(GUI)工具包之一,它为Java开发者提供了一系列的组件,帮助我们创建图形化的界面。尽管现在SwingJavaFX等工具包在功能上已经超越了AWT,但AWT的基本组件仍然是我们理解Java GUI编程的基础。

本篇博客将深入了解AWT中常见的基本组件,包括按钮、标签、文本框等,并结合实际代码示例展示如何在AWT中使用这些组件。

1. AWT简介

AWT(Abstract Window Toolkit)是Java提供的一个图形化界面工具包,它允许开发者构建跨平台的用户界面。AWT中所有的GUI组件都依赖于本地操作系统的窗口系统进行绘制,因此AWT组件在不同操作系统上的外观可能略有不同。

AWT的核心组件包括:

  • 容器:如FramePanelWindow等。
  • 基本组件:如ButtonLabelTextFieldCheckbox等。
  • 事件处理:AWT允许开发者通过事件监听器来响应用户的操作(如点击、键盘输入等)。

2. AWT基本组件

AWT中有一些非常基础且常用的组件,这些组件是构建图形界面应用程序的基础。下面我们将介绍其中几个最常用的组件及其用法。

2.1 Button:按钮

按钮是最常见的图形界面组件,通常用于触发某些操作。

import java.awt.*;
import java.awt.event.*;public class ButtonExample {public static void main(String[] args) {Frame frame = new Frame("AWT Button Example");// 创建一个按钮Button button = new Button("Click Me");// 给按钮添加事件监听器button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {System.out.println("Button clicked!");}});// 设置按钮的位置和大小button.setBounds(100, 100, 100, 50);// 添加按钮到窗口frame.add(button);// 设置窗口大小和布局frame.setSize(300, 200);frame.setLayout(null);// 显示窗口frame.setVisible(true);}
}

2.2 Label:标签

标签用于显示静态文本,常用于界面中提示用户或者显示信息。

import java.awt.*;
import java.awt.event.*;public class test {public static void main(String[] args) {Frame frame = new Frame("AWT Label Example");// 创建一个标签Label label = new Label("Hello, AWT!");// 设置标签的位置和大小label.setBounds(100, 100, 200, 30);// 添加标签到窗口frame.add(label);// 设置窗口大小和布局frame.setSize(300, 200);frame.setLayout(null);// 显示窗口frame.setVisible(true);frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}}

2.3 TextField:文本框

文本框用于接收用户输入的单行文本。

import java.awt.*;public class TextFieldExample {public static void main(String[] args) {Frame frame = new Frame("AWT TextField Example");// 创建一个文本框TextField textField = new TextField();// 设置文本框的位置和大小textField.setBounds(100, 100, 200, 30);// 添加文本框到窗口frame.add(textField);// 设置窗口大小和布局frame.setSize(300, 200);frame.setLayout(null);// 显示窗口frame.setVisible(true);}
}

 

2.4 Checkbox:复选框

复选框允许用户在多个选项中进行选择,用户可以选择多个选项。

import java.awt.*;
import java.awt.event.*;
public class CheckboxExample {public static void main(String[] args) {Frame frame = new Frame("AWT Checkbox Example");// 创建复选框Checkbox checkbox = new Checkbox("Accept Terms");// 设置复选框的位置checkbox.setBounds(100, 100, 150, 30);// 添加复选框到窗口frame.add(checkbox);// 设置窗口大小和布局frame.setSize(300, 200);frame.setLayout(null);// 显示窗口frame.setVisible(true);frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}
}

2.5 Choice:下拉菜单

Choice组件提供一个下拉菜单,让用户可以从中选择一个选项。

package BasicComponent;import java.awt.*;public class CheckboxExample {public static void main(String[] args) {Frame frame = new Frame("AWT Choice Example");// 创建一个下拉菜单Choice choice = new Choice();choice.add("Option 1");choice.add("Option 2");choice.add("Option 3");// 设置下拉菜单的位置choice.setBounds(100, 100, 150, 30);// 添加下拉菜单到窗口frame.add(choice);// 设置窗口大小和布局frame.setSize(300, 200);frame.setLayout(null);// 显示窗口frame.setVisible(true);}
}

2.6 List:列表

List组件允许用户从多个选项中选择一个或多个项目。

import java.awt.*;public class ListExample {public static void main(String[] args) {Frame frame = new Frame("AWT List Example");// 创建一个列表List list = new List();list.add("Item 1");list.add("Item 2");list.add("Item 3");// 设置列表的位置list.setBounds(100, 100, 150, 100);// 添加列表到窗口frame.add(list);// 设置窗口大小和布局frame.setSize(300, 200);frame.setLayout(null);// 显示窗口frame.setVisible(true);}
}

综合案例 

 

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class ComponentTest {Frame fr = new Frame("基本组件测试");// 文本域TextArea ta = new TextArea(5, 20);// 下拉选择框Choice colorChoice = new Choice();CheckboxGroup cbg = new CheckboxGroup();// 复选框组件Checkbox sex1 = new Checkbox("男", cbg, true);Checkbox sex2 = new Checkbox("女", cbg, false);Checkbox ist = new Checkbox("是否已婚", false);// 单行文本框TextField tf = new TextField(20);Button ok = new Button("确定");List color = new List(6, true); // 列表框public void init() {// 组装界面color.add("red");color.add("blue");color.add("green");color.add("black");color.add("yellow");color.add("pink");colorChoice.add("red");colorChoice.add("blue");colorChoice.add("green");Box bottom = Box.createHorizontalBox();bottom.add(tf);bottom.add(ok);Box center = Box.createHorizontalBox();center.add(sex1);center.add(sex2);center.add(ist);center.add(colorChoice);// 组装文本域和选择框Box topleft = Box.createVerticalBox();topleft.add(ta);topleft.add(center);Box top = Box.createHorizontalBox();top.add(topleft);top.add(color);fr.add(top, BorderLayout.NORTH);fr.add(bottom, BorderLayout.SOUTH);//fr.setBounds(100, 100, 300, 200);fr.pack();fr.setVisible(true);// 添加窗口关闭事件监听器fr.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});}public static void main(String[] args) {ComponentTest c = new ComponentTest();c.init();}
}

 注意

组件示例中的部分代码没有加窗口关闭的事件监听器。

Frame 的new 对象名.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

3. AWT事件处理

AWT允许我们通过事件监听机制来响应用户的操作,例如点击按钮、键盘输入等。事件处理是GUI编程中非常重要的一部分,通常需要实现对应的事件监听接口。

import java.awt.*;
import java.awt.event.*;public class EventHandlingExample {public static void main(String[] args) {Frame frame = new Frame("AWT Event Handling Example");Button button = new Button("Click Me");// 添加按钮的点击事件处理器button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {System.out.println("Button clicked!");}});button.setBounds(100, 100, 100, 50);frame.add(button);frame.setSize(300, 200);frame.setLayout(null);frame.setVisible(true);}
}

3.1 常见事件监听器

  • ActionListener:用于处理按钮、文本框等组件的动作事件。
  • WindowListener:用于处理窗口的各种事件,如窗口关闭、最小化等。
  • KeyListener:用于处理键盘事件。
  • MouseListener:用于处理鼠标事件

4. 结束语

AWT是Java中最基础的GUI工具包,它提供了许多常见的组件,如按钮、标签、文本框、复选框等,帮助开发者快速构建图形化界面。虽然AWT的外观和功能不如Swing或JavaFX丰富,但它为后续的GUI框架打下了坚实的基础。

通过本文的介绍,希望大家对AWT的基本组件有了初步的了解。如果是Java GUI开发的初学者,AWT是一个非常好的起点,掌握了AWT的使用,将能够更容易地理解Swing、JavaFX等更强大的GUI框架。

相关文章:

深入浅出:AWT的基本组件及其应用

目录 前言 1. AWT简介 2. AWT基本组件 2.1 Button:按钮 2.2 Label:标签 ​编辑 2.3 TextField:文本框 2.4 Checkbox:复选框 2.5 Choice:下拉菜单 2.6 List:列表 综合案例 注意 3. AWT事件处理 …...

MySQL45讲 第三十六讲 为什么临时表可以重名?——阅读总结

文章目录 MySQL45讲 第三十六讲 为什么临时表可以重名?——阅读总结一、引言二、临时表与内存表的区别(一)内存表(二)临时表 三、临时表的特性(一)可见性与生命周期(二)与…...

WebRTC服务质量(11)- Pacer机制(03) IntervalBudget

WebRTC服务质量(01)- Qos概述 WebRTC服务质量(02)- RTP协议 WebRTC服务质量(03)- RTCP协议 WebRTC服务质量(04)- 重传机制(01) RTX NACK概述 WebRTC服务质量(…...

.NET常用的ORM框架及性能优劣分析总结

市面上有很多流行的 ORM(对象关系映射)框架可以用于 .NET 开发。本文主要针对以下几种常见的 ORM 框架,对其优劣进行分析及总结,希望能够帮助大家进行ORM框架的使用有所帮助。 1. Entity Framework (EF) 特点 • 官方支持&…...

Ubuntu网络配置(桥接模式, nat模式, host主机模式)

windows上安装了vmware虚拟机, vmware虚拟机上运行着ubuntu系统。windows与虚拟机可以通过三种方式进行通信。分别是桥接模式;nat模式;host模式 一、桥接模式 所谓桥接模式,也就是虚拟机与宿主机处于同一个网段, 宿主机…...

光通信复习

第一章 1.5 光纤通信系统的基本组成是怎么样的?试画出简图予以说明 光纤:主要负责光信号的传输光发送器:将用户端的电信号转化为光信号,入射到光纤内部光中继器:将光纤中发生衰减和畸变的光信号变成没有衰减和畸变的原…...

数字化转型中的投资决策:IT平台投资与业务应用投资的思考

在数字化转型的大潮中,企业常常面临一个核心问题:如何在繁杂的投资决策中精准地分配资源,特别是在IT平台投资和业务应用投资之间,如何合理划分责任与投入?在一些大型企业中,尤其是华为,针对不同…...

Linux快速入门-Linux的常用命令

Linux的常用命令 1. Linux的终端与工作区1.1 终端概述1.2 切换终端 2. Shell语言解释器2.1 Shell概述 3. 用户登录与身份切换3.1 su 命令3.2 sudo 命令 4. 文件、目录操作命令4.1 pwd 命令4.2 cd 命令4.3 ls 命令4.3.1 ls 指令叠加使用 4.4 mkdir 命令4.5 rmdir 命令4.6 cp 命令…...

【ORB-SLAM3:相机针孔模型和相机K8模型】

在ORB-SLAM3中,相机的建模是 SLAM 系统的核心之一,因为它直接影响到如何处理和利用图像数据进行定位和地图构建。ORB-SLAM3 支持不同的相机模型,其中包括针孔模型和鱼眼模型(K8 模型)。下面分别介绍这两种模型。 相机…...

Python函数(十二):函数的创建和调用、参数传递、返回值

前言:在编程的世界里,函数是一种基本的构建块,它允许我们将代码封装成可重复使用的单元。在Python中,函数的使用尤为重要,因为它不仅有助于代码的模块化,还提高了代码的可读性和可维护性。本章节&#xff0…...

掌握Docker命令与Dockerfile实战技巧:快速构建高效容器化应用

1. 介绍 Docker 是现代开发和运维的必备工具,集成了容器技术的优势。本文将记录 Docker 的常用指令,并会随着使用经验的积累进行不定期更新。 2. 常用命令 2.1 启动容器(前台交互模式) docker run --privileged --volume /hom…...

Virtualbox硬盘扩容

前言 有没有使用虚拟机安装操作系统的时候,虚拟硬盘一开始分配的虚拟硬盘空间不够用?在后期去扩容的伙伴们,下面我看看如何扩容virtualbox的虚拟硬盘? 重新分配虚拟硬盘大小 在virtualbox菜单选择【管理】-【工具】-【虚拟介质…...

10G光纤反射内存卡

在科技日新月异的今天,数据存储技术正以前所未有的速度发展,其中,“10G光纤反射内存卡”作为新一代存储技术的佼佼者,正逐步引领着数据存储领域的新风尚。本文将深入探讨这一创新产品的技术原理、性能优势、应用场景以及未来展望&…...

信创数据防泄漏中信创沙箱是什么样的安全方案

在信息化与工业化融合创新(信创)的快速发展中,企业面临着日益复杂的数据安全挑战。SDC沙盒技术以其独特的安全机制和先进的设计理念,为信创环境提供了强有力的数据保护支持。以下是SDC沙盒在信创领域支持能力的几个关键侧重点&…...

虚幻引擎结构之TArray

1.TArray 简介 TArray 是虚幻引擎提供的一个动态数组容器,用于存储相同类型的元素集合。它是一个模板类,能够容纳任意类型的数据,为用户提供了一套简便的方法来添加、删除、访问和操作数组中的元素。作为虚幻引擎的核心数据结构之一&#xff…...

【搭建一个网上商城系统】

搭建一个网上商城系统是一个复杂但有序的过程,涉及多个关键步骤。以下是一些主要的步骤: 确定运营模式 选择适合的模式:根据企业的规模、业务形态和目标市场,选择合适的电商平台运营模式,如B2C(商对客&am…...

【gopher的java学习笔记】Spring Boot Starter初探

转到java这边后,这天需要搭一个java的web service出来,如果是以前golang的话,那我就可以非常熟练的用gin搭建一个web service出来,核心逻辑就是写好一些rest接口实现后再加上最为灵魂的一句: // 启动Gin服务器在8080端…...

web服务器之云主机、物理机租用、服务器托管的区别

云主机、物理机租用和服务器托管是三种不同的Web服务器部署方式,它们各有特点,适用于不同需求的用户。以下是这三种服务的区别: 云主机(Cloud Hosting): 资源分配:基于虚拟化技术,多…...

centos制作离线安装包

目录 1.yumdownloader与repotrack怎么选择? yumdownloader --resolve repotrack 总结 2.环境准备 3.安装 1.yumdownloader与repotrack怎么选择? yumdownloader --resolve 和 repotrack 都是与 YUM(Yellowdog Updater Modified&#xf…...

论文解读——掌纹生成网络 RPG-Palm升级版PCE-Palm

该文章是2023年论文RPG-Palm的升级版 论文:PCE-Palm: Palm Crease Energy Based Two-Stage Realistic Pseudo-Palmprint Generation 作者:Jin, Jianlong and Shen, Lei and Zhang, Ruixin and Zhao, Chenglong and Jin, Ge and Zhang, Jingyun and Ding,…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

云计算——弹性云计算器(ECS)

弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

django filter 统计数量 按属性去重

在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...