AWT概述
GUI(Graphical User Interface),即图形用户界面,即应用程序提供给用户操作的图形界面,包括窗口、菜单、按钮、工具栏和其它各种图形界面元素
GUI设计提供了丰富的类库,这些类分别位于java.awt和javax.swing包中,简称为AWT和Swing。
AWT:重量型组件
Swing:轻量型组件
Swing不仅实现了AWT中的所有功能,而且提供了更加丰富的组件和功能,足以满足GUI设计的一切需求。
AWT(Abstract Window Tools)
AWT是用于创建图形用户界面的工具包,它提供了一系列用于实现图形界面的组件,如窗口、按钮、文本框、对话框等。
这些组件都位于java.awt包中。
组件不能独立地显示出来,必须将组件放在特定的对象中才能显示出来,即包含组件的组件——Container(容器)。
容器Container是Component的子类,它本身也是组件,具有组件所有的性质,也具有容纳其他组件和容器的功能。
Window:可独立存在的顶级窗口
Panel:可作为容器容纳其它组件,但不能独立存在,必须被添
加到其它容器中(如Window 或 Applet)
组件和容器的关系
Window类是不依赖其它容器而独立存在的容器。
Window类有两个子类:Frame类和Dialog类
Frame类用于创建具有标题栏的框架窗口,作为程序的主界面。
Dialog类用于创建一个对话框,实现与用户的信息交互。
Panel也是一个容器,但它不能单独存在,只能存在其它容器(Window或其子类)中,
一个Panel对象代表了一个长方形的区域,在这个区域中可以容纳其它组件。
布局管理器
不同平台对图形界面的管理也是不尽相同的,若采用绝对定位的方法管理Java图形界面的布局,那么当程序运行在不同的设备上的时候(比如分辨率变化了、现实设备不同了),窗体外观就会变形
超出显示区域或无法满屏显示
默认布局管理器
FlowLayout
FlowLayout是流式布局管理器,最简单的布局管理器。
使用FlowLayout布局管理器时,容器会将组件按照添加顺序从左向右放置。当到达容器的边界时,会自动将组件放到下一行的开始位置。这些组件可以左对齐、居中对齐(默认方式)或右对齐的方式排列。
FlowLayout布局管理器的特点就是可以将所有组件像流水一样依次进行排列,不需要用户明确的设定,但是在灵活性上相对差了点。
参数align决定组件在每行中相对于容器边界的对齐方式。
可以使用该类中提供的常量作为参数传递给构造方法
FlowLayout.LEFT用于表示左对齐
FlowLayout.RIGHT用于表示右对齐
FlowLayout.CENTER用于表示居中对齐参数hgap和参数vgap分别设定组件之间的水平和垂直间隙,可以填入一个任意数值。
BorderLayout
BorderLayout(边界布局管理器)是一种较为复杂的布局方式。
BorderLayout将容器划分为五个区域,分别是东(EAST)、南(SOUTH)、西(WEST)、北(NORTH)、中(CENTER)。
组件可以被放置在这五个区域的中任意一个。
GridLayout
GridLayout(网格布局管理器)使用纵横线将容器分成n行m列大小相等的网格,每个网格中放置一个组件。
添加到容器中的组件首先放置在第1行第1列(左上角)的网格中,然后在第1行的网格中从左向右依次放置其它组件,行满后,继续在下一行中从左到右放置组件
GridBagLayout
GridBagLayout(网格包布局管理器)允许网格中的组件大小各不相同,而且允许一个组件跨越一个或者多个网格。
CardLayout
CardLayout(卡片布局管理器)将界面看做一系列卡片,在任何时候只有其中一张卡片是可见的,这张卡片占据容器的整个区域。
CardLayout的常用方法
不使用布局管理器
如果不希望通过布局管理器对容器进行布局,调用容器的setLayout(null)方法,将布局管理器取消。
不使用布局管理器时,程序必须调用容器中每个组件的setSize()和setLocation()方法或者是setBounds()方法(这个方法接收四个参数,分别是左上角的x、y坐标和组件的长、宽)来为这些组件在容器中定位。
AWT事件处理
事件处理机制
事件处理机制专门用于响应用户的操作
事件对象(Event):封装了GUI组件上发生的特定事件(通常就是用户的一次操作
事件源(组件):事件发生的场所,通常就是产生事件的组件
监听器(Listener):负责监听事件源上发生的事件,并对各种事件做出响应处理的对象(对象中包含事件处理器)
事件处理器:监听器对象对接收的事件对象进行相应处理的方法
事件适配器
几乎所有的监听器接口都有对应的适配器类
通过继承适配器类实现监听器接口时,需要处理哪种事件,直接重写该事件对应的方法即可
用匿名内部类实现事件处理
常用事件
窗体事件
WindowEvent用于表示窗体事件
对窗体事件进行处理步骤
首先定义一个类实现WindowListener接口作为窗体监听器
然后通过addWindowListener()方法将窗体对象与窗体监听器绑定
鼠标事件
MouseEvent类用于表示鼠标事件,几乎所有的组件都可以产生鼠标事件,鼠标事件包括鼠标按下、鼠标松开、鼠标单击等。
对鼠标事件的处理可通过实现MouseListener接口或者继承适配器MouseAdapter类,然后调用addMouseListener()方法将监听器绑定到事件源对象。
键盘事件
键盘操作也是最常用的用户交互方式,例如键盘按下、释放等,这些操作被定义为键盘事件
KeyEvent类表示键盘事件,处理KeyEvent事件的监听器对象需要实现KeyListener接口或者继承KeyAdapter类
动作事件
在Java中,动作事件用ActionEvent类表示,处理ActionEvent事件的监听器对象需要实现ActionListener接口,但监听器对象在监听动作时,不会像鼠标事件一样处理鼠标个别的移动和单击的细节,而是去处理“按钮按下”这样“有意义”的事件
AWT绘图
java.awt包中专门提供了一个Graphics类,它相当于一个抽象的画笔。