老掉牙的历史
Java1.0在发布的时候,就为我们提供了GUI操作的库,这个库系统在所有的平台下都可以运行,这套基本的类库被称作抽象窗口工具集(Abstract Window Toolit),简称AWT。它为Java应用程序提供基本的图形组件。AWT是窗口框架,它从不同平台的窗口系统中抽取出共同组件。当程序运行时,将这些组件的创建和动作委托给程序所在的运行平台。简而言之,当使用AWT编写图形界面应用时,程序仅指定了界面组件的位置和行为,并未提供真正的实现,JVM调用操作系统本地的图形界面来创建和平台一致的对等体。
但是AWT编程却有很多问题:
- 使用AWT做出的图形用户界面在所有平台上都显得很丑陋,功能也非常有限
- AWT为了迎合所有主流操作系统界面设计,AWT组件只能使用这些操作系统上图形界面组件的交集,所以不能使用特定操作系统上复杂的图形界面组件
- 最多只能使用4种字体
- AWT用的是非常笨拙的、非面向对象的编程模式
基于以上的问题,Sun后来发明了Swing:
这套 GUI 库的所有图形界面组件,例如文本框、按钮等都是绘制在空白窗口上的,只有窗口本身需要借助于操作系统的窗口实现.实现了真正的各个平台的一致性。
AWT的继承关系图:
所有和AWT编程相关的类都放在java.awt包以及它的子包中,AWT编程中有两个基类 Component(普通组件)和MenuComponent(菜单组件)
1、窗口示例图解:
任何一个窗口都可以分解为一个空的容器,以及多个组件。我们通过设置这些组件的大小,位置等等,就可以组成我们的丰富多彩的窗口。
那么Java里面什么代表空的容器呢?
容器(Container)是Component(表示组件)的子类,因此容器对象本身也是一个组件,具有组件的所有性质。但是我们的Container是所有容器的父类,我们提供了两个类型的容器,一种是Window,一种是Panel。Windows是可以独立存在的容器,我们也叫做顶级窗口,而panel不能独立存在必须添加到其他容器中。容器的继承关系图如下:
第一个小窗口
import java.awt.*; /** * @ClassName frameTest * @projectName: object1 * @author: Zhangmingda * @description: XXX * date: 2021/4/29. */ public class frameTest { public static void main(String[] args) { Frame frame = new Frame("第一个测试窗口"); Panel panel = new Panel(); //容器 frame.setBounds(200,200,400,200); /** * 文本框,按钮 */ TextField field = new TextField(30); Button button = new Button("点我"); panel.add(field);// 容器添加文本框 panel.add(button); //容器添加按钮 frame.add(panel); // 窗口添加容器 frame.setVisible(true);//显示窗口 } }
效果图
buttun 中文乱码
vm options 里面加上 -Dfile.encoding=gbk