咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~
🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!
环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8
前言
今天我们来玩个有意思的东西,如何通过Java语言来绘画界面?这个大家肯定都很好奇,不是前端干的活,怎么Java也是可以用于来实现界面化?是的,我的回答是肯定的。我们处于在Java的开发语言中,GUI(图形用户界面)编程它是一个重要的领域。Java提供了多种方式来创建GUI应用程序,其中AWT(Abstract Window Toolkit)是最早出现的工具包之一。AWT作为一个抽象的窗口工具集,为Java程序提供了丰富的窗口组件和绘图能力,它真的超级有趣,今天我就要带着大家好好玩一局。
摘要
本文我将会带着大家深入探讨JavaSE中的AWT,包括其基本概念、组件、事件处理机制以及如何使用AWT创建GUI应用程序。通过案例代码、案例分享和实际测试用例,本文将帮助大家理解AWT的工作原理和应用场景,以至于大家都能掌握实现简单窗口的程序能力为止,如果你不会,你一定要提出来,因为我必须会把你教会。
正文
如下我们便开启今日的正文内容了,大家做好准备了没?
概述
首先,我们先来了解下AWT的概念,何为AWT?可能很多小伙伴都不清楚,不碍事,这里我会给大家讲解清楚。它可以说是Java最初的GUI工具包,它包含了一系列的类,用于创建和管理窗口、按钮、文本框等GUI组件。AWT是基于本地操作系统的GUI库实现的,这使得它能够提供与操作系统一致的界面元素。如果要我再具体点,请看如下:
AWT,全称是Abstract Window Toolkit,是Java语言中用来创建图形用户界面(GUI)的一个工具包。它提供了一套丰富的组件和工具,让开发者能够构建出美观且功能强大的应用程序界面。
你无妨想象一下,AWT就像是一个工具箱,里面装满了各种工具和材料,比如锤子、钉子、螺丝刀等。当你想建造一个房子时,你可以从这个工具箱中挑选你需要的工具。同样,当你想用Java语言开发一个应用程序的界面时,你可以从AWT这个工具箱中选择你需要的组件,比如按钮、文本框、菜单等。
特点
AWT的特点可以用以下几个方面来概括:
-
抽象性:AWT提供了一个抽象层,使得开发者不需要关心底层操作系统的细节,就可以创建跨平台的GUI应用程序。
-
组件丰富:AWT包含了多种基本的GUI组件,如按钮(Button)、标签(Label)、文本框(TextField)等,这些组件可以满足大多数基本的界面设计需求。
-
事件驱动:AWT应用程序是基于事件驱动的,这意味着应用程序的执行流程是由用户的操作(如点击按钮、选择菜单项等)来驱动的。
-
绘图能力:AWT还提供了一套绘图API,允许开发者在组件上绘制图形和文本,实现更复杂的视觉效果。
-
线程安全:AWT的组件是线程安全的,这意味着它们可以在多线程环境中安全使用,而不会出现数据不一致的问题。
-
性能:虽然AWT是Java GUI开发的基石,但随着技术的发展,它的性能和外观可能不如一些更现代的替代品,如Swing。
总的来说,AWT就像是Java GUI开发的一块基石,虽然它可能不是最闪亮或最现代的,但它为Java应用程序的界面开发提供了坚实的基础。随着技术的进步,许多新的工具和库(如Swing和JavaFX)已经出现,提供了更丰富的功能和更好的性能,但AWT依然是理解Java GUI开发的重要起点。
案例演示
这里,我们通过上述所讲,通过一个案例,来跟大家简单实现一下。对于AWT,它的核心类是java.awt.Component
,它是所有AWT组件的基类。以下是创建一个简单AWT窗口的示例代码:
import java.awt.*;
import javax.swing.*;
public class AwtWindowExample {
public static void main(String[] args) {
Frame frame = new Frame("AWT Window Example");
frame.setSize(300, 200);
frame.setLayout(new FlowLayout());
Button button = new Button("Click Me!");
frame.add(button);
frame.setVisible(true);
}
}
代码解析:
接着我将对上述代码进行详细的一个逐句解读,希望能够帮助到同学们,能以更快的速度对其知识点掌握学习,这也是我写此文的初衷,授人以鱼不如授人以渔,只有将其原理摸透,日后应对场景使用,才能得心应手,所以如果有基础的同学,可以略过如下代码分析步骤,然而没基础的同学,还是需要加强对代码的理解,方便你深入理解并掌握其常规使用。
这段Java代码演示了如何使用AWT库创建一个简单的窗口应用程序。下面是代码的逐行解析:
-
import java.awt.*;
:导入AWT库中的所有类。这使得我们可以使用AWT提供的各种组件和方法。 -
import javax.swing.*;
:导入Swing库中的所有类。Swing是AWT的扩展,提供了更多的组件和功能。 -
public class AwtWindowExample {
:定义了一个名为AwtWindowExample
的公共类。 -
public static void main(String[] args) {
:定义了程序的入口点,即main
方法。这个方法是程序执行的起点。 -
Frame frame = new Frame("AWT Window Example");
:创建了一个Frame
对象,这是AWT中用于表示窗口的组件。我们给这个窗口设置了一个标题"AWT Window Example"。 -
frame.setSize(300, 200);
:设置窗口的大小为宽300像素,高200像素。 -
frame.setLayout(new FlowLayout());
:为窗口设置布局管理器。这里使用的是FlowLayout
,它是一种简单的布局管理器,按照组件添加的顺序从左到右、从上到下排列组件。 -
Button button = new Button("Click Me!");
:创建了一个Button
对象,并设置按钮上显示的文本为"Click Me!"。 -
frame.add(button);
:将创建的按钮添加到窗口中。由于使用了FlowLayout
,按钮会被添加到窗口的下一个可用位置。 -
frame.setVisible(true);
:设置窗口为可见状态。这会触发窗口的显示,用户可以在屏幕上看到这个窗口。
需要注意的是,这段代码中虽然导入了Swing库,但实际上并没有使用到Swing的任何组件或功能。此外,代码中使用的Frame
类在Swing中已经被JFrame
类所取代,因为JFrame
提供了更多的功能和更好的事件处理能力。但是,为了演示AWT的基本用法,这里使用了Frame
类。
最后,这段代码没有包含事件监听器的设置,所以按钮点击不会有任何反应。在实际的应用开发中,通常会为按钮添加一个事件监听器来处理用户的点击事件。
使用案例
考虑一个简单的计算器程序,使用AWT组件实现。该程序包含文本框、按钮和标签,用户可以通过点击按钮执行加法或减法运算。再者,也可以用它来制作写小游戏,像我之前就用它实现了一个改良版的贪吃蛇,还是非常有意思的。这个我后续再逐步与大家说。
应用场景案例列举
- 桌面应用程序:需要与操作系统紧密集成的桌面应用程序。
- 快速原型开发:需要快速展示GUI原型时,可以使用AWT。
- 教学和学习:由于AWT的简单性,它常被用于教学和学习Java GUI编程。
优缺点分析
接着,对于连接池,我也是需要跟大家兜个底,所有被开发创造出来的事物,都有其好的一面跟不好的一面,需要辩证对待,比如说:
优点
- 与操作系统集成:AWT组件与本地操作系统的GUI控件一致。
- 简单易用:AWT提供了简单的API来创建GUI组件。
缺点
- 性能问题:由于AWT组件是重量级的,它们可能不如Swing组件高效。
- 跨平台外观:AWT组件的外观和感觉受限于本地操作系统,可能不会在所有平台上提供一致的体验。
类代码方法介绍
这里,我主要是给大家普及一下,AWT中一些重要的类和它们的用途包括:
Frame
:用于创建窗口。Panel
:用于组织和布局其他组件。Button
:用于创建按钮。Label
:用于显示文本或图像。TextField
:用于输入文本。
测试用例
这里,我主打一个理论实践相结合的教学模式,当然, 我也是为了给大家演示一下,如何通过AWT组件实现一个简单的窗口程序。诺,大家请看,以下是一个使用AWT组件的简单测试用例,演示了如何创建窗口和按钮,仅供参考:
测试代码
具体完整的测试代码请参考如下:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* @Author bug菌
* @Source 公众号:猿圈奇妙屋
* @Date 2024年7月9日15:01:32
*/
public class AwtTest {
public static void main(String[] args) {
Frame f = new Frame("AWT Test");
f.setSize(400, 400);
f.setLayout(new BorderLayout());
Button b = new Button("Test Button");
Label messageLabel = new Label("这里是默认消息", Label.CENTER);
// 使用默认的对话框字体,这通常支持中文字符
messageLabel.setFont(new Font("Dialog", Font.PLAIN, 12));
b.setFont(new Font("Dialog", Font.PLAIN, 12));
// 添加事件监听器
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
messageLabel.setText("bug菌在线测试!更多请关注公众号【猿圈奇妙屋】");
}
});
f.add(b, BorderLayout.NORTH);
f.add(messageLabel, BorderLayout.SOUTH);
f.setVisible(true);
}
}
注意,在使用IDEA窗体添加button按钮,label标签时,可能会遇到显示的中文变成方框这一问题,若你运行之后也是如下乱码界面,如下:那么你往后看,我会一步一步教你把中文展示正常。
解决中文展示为框框问题教学
在 Java AWT 程序中,如果中文显示出现乱码,这通常是因为默认的字符编码不是 UTF-8 或者没有正确设置字符编码。以下是解决乱码问题最直接最有效的方法,请参考:
1、第一,你编辑器如果用的是idea,那你直接右上角打开【Edit Configurations…】选项。演示如下:
2、打开之后,找到如下界面中的【Modify options】蓝色按钮,演示如下:
3、我们在其弹框中,把【Add VM options】勾选上。
4、然后选完后,关闭,会看到多出来一行,这一行,我们直接指定编码即可。演示如下:
5、然后输入如下这行设置编码即可。
-Dfile.encoding=GBK
6、设置完后,我们重新启动main函数,我们就可以看到,其中文可以正常展示啦。
7、我们继续来测试我们上述的案例,我们通过鼠标来点击【Test Button】按钮试试。
8、我们所设置的按钮触发事件成功把展示内容替换成功了,成功展示了我们所想要显示的内容了。截图如下:
看到如上界面,大功告成,虽然界面有点丑,但我主要是为了演示为主,具体美化,这个大家可以琢磨一下。
测试代码运行结果
根据如上的测试用例,作者在本地进行测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加其他的测试数据或测试方法,以便于进行熟练学习以此加深知识点的理解。
最终的操作界面如下:
测试代码解析
接着我将对上述代码进行详细的一个逐句解读,希望能够帮助到同学们,能以更快的速度对其知识点掌握学习,这也是我写此文的初衷,授人以鱼不如授人以渔,只有将其原理摸透,日后应对场景使用,才能得心应手,所以如果有基础的同学,可以略过如下代码分析步骤,然而没基础的同学,还是需要加强对代码的理解,方便你深入理解并掌握其常规使用。
如上测试代码是一个简单的AWT(Abstract Window Toolkit)应用程序,用于创建一个带有按钮和标签的窗口。下面是我对代码的逐行解析:
1-2. 导入了java.awt
包中的组件和事件处理类,这是创建图形用户界面(GUI)所必需的。
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
4-11. 定义了一个名为AwtTest
的公共类,它包含了主方法main
,这是Java程序的入口点。
public class AwtTest {
public static void main(String[] args) {
// ...
}
}
13-14. 创建了一个Frame
对象,这是AWT中最基本的窗口组件,用于显示应用程序的窗口。
Frame f = new Frame("AWT Test");
16-17. 设置窗口的大小为400x400像素,并设置布局管理器为BorderLayout
,这是一种将窗口分为五个区域(北、南、东、西、中)的布局方式。
f.setSize(400, 400);
f.setLayout(new BorderLayout());
19-20. 创建了一个Button
对象和一个Label
对象,分别用于显示一个按钮和一个标签。
Button b = new Button("Test Button");
Label messageLabel = new Label("这里是默认消息", Label.CENTER);
22-25. 为标签和按钮设置了字体样式,这里使用的是默认的对话框字体,大小为12号字体。
messageLabel.setFont(new Font("Dialog", Font.PLAIN, 12));
b.setFont(new Font("Dialog", Font.PLAIN, 12));
27-35. 为按钮添加了一个事件监听器,当按钮被点击时,会触发actionPerformed
方法,该方法会更新标签的文本。
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
messageLabel.setText("bug菌在线测试!更多请关注公众号【猿圈奇妙屋】");
}
});
37-38. 将按钮添加到窗口的北部(BorderLayout.NORTH
),将标签添加到窗口的南部(BorderLayout.SOUTH
)。
f.add(b, BorderLayout.NORTH);
f.add(messageLabel, BorderLayout.SOUTH);
- 调用
setVisible(true)
方法使窗口可见。
f.setVisible(true);
测试案例我主要是为了展示如何使用AWT创建一个简单的GUI应用程序。当用户点击按钮时,标签的文本会更新为指定的消息。可以看到界面会成功把自定义的内容给展示出来。
但是有一点大家需要注意,AWT是Java较老的GUI工具包,现在已经被Swing所取代,Swing提供了更多的组件和更好的事件处理机制。但是,AWT仍然是Java GUI编程的基础,了解AWT有助于更好地理解Swing,晓得吧,所以说,我们必须一步一步来,旧的新的都要掌握,而不是只想着学习最新的技术,咱们一口吞不下个胖子。
总结
本文我以一种轻松幽默的方式,向大家介绍了Java SE中的AWT(Abstract Window Toolkit)及其在GUI编程中的应用。AWT作为Java最初的GUI工具包,提供了丰富的组件和绘图能力,允许开发者创建与操作系统紧密集成的桌面应用程序。文章通过一个简单的AWT窗口示例,详细解释了如何使用AWT组件创建窗口、设置布局、添加按钮和标签,并处理用户交互。
核心要点
- AWT基础:AWT是Java的原始GUI工具包,提供了窗口、按钮、文本框等多种组件。
- 事件驱动:AWT程序的执行流程由用户操作(如点击按钮)驱动。
- 绘图能力:AWT允许开发者在组件上绘制图形和文本。
- 线程安全:AWT组件可以在多线程环境中安全使用。
- 性能考量:相较于现代的Swing,AWT组件可能在性能上存在局限。
教学案例
文章通过一个AWT窗口示例,展示了如何创建基本的GUI应用程序。示例中包括了创建窗口、设置窗口大小和布局、添加按钮和标签,并为按钮添加事件监听器以更新标签文本。
中文乱码问题
文章还特别提到了在AWT程序中可能遇到的中文乱码问题,并提供了解决方案,即通过设置虚拟机选项来指定正确的字符编码(如GBK)。
小结
AWT作为Java GUI开发的基石,虽然在现代开发中可能不是首选,但它的学习和理解对于掌握更高级的GUI工具包如Swing和JavaFX仍然非常重要。通过本文的学习和实践,读者可以对AWT有一个基本的了解,并能够创建简单的GUI应用程序。同时,作者提供的额外资源和建议,也为读者进一步深入学习Java提供了方向。
结语
最后,这篇深入浅出的AWT教程,能够让大家对Java的GUI编程有初步的认识,也能激发了大家进一步探索和学习的兴趣。希望同学们能够通过本文的学习和实践,逐步提升自己的编程技能,最终能够在Java的世界里自由翱翔。
… …
ok,以上就是我这期的全部内容啦,如果还想学习更多,你可以看看如下的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬。
「赠人玫瑰,手留余香」,咱们下期拜拜~~
附录源码
如上涉及所有源码均已上传同步在「Gitee」,提供给同学们一对一参考学习,辅助你更迅速的掌握。
☀️建议/推荐你
无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学Java」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门Java编程,就像滚雪球一样,越滚越大,指数级提升。
最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。
同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。
📣关于我
我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 20w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。