GUI图形用户界面(Granhical User Interface)
一、AWT(Abstract Window Toolkit)的基础知识
1、JDK中提供AWT和Swing两个包,用于GUI程序的设计开发。
2、GUI组件可以分为两大类,基本组件和容器,分别是java.awt.Component和java.awt.Container的直接或间接的子类。
3、程序的GUI部分由AWT线程管理。
二、AWT事件处理
1、事件处理机制
2、事件分类
3、事件监听器
4、事件适配器
5、灵活设计事件监听器类
6、用匿名内置类实现事件监听器
三、事件处理机制 3个重要概念
1、事件:用户对组件的一个操作,称为一个事件
2、事件源:发生事件的组件就是事件源
3、事件处理器:某个java类中的负责处理事件的成员方法
事件分类
1、按事件的物理操作和GUI组件的表现效果进行分类:
MouseEvent 鼠标事件 WindowEvent 窗口事件 ActionEvent 动作事件
2、事件的性质分类: 低级事件和语义事件(高级事件)
四、事件监听器
1、一个事件监听器负责处理一类事件
2、一类事件的每一种发生情况,分别由事件监听器对象中的一个方法来具体处理
3、在事件源和事件监听器对象中进行约定的接口类,被称为事件监听器接口
4、事件监听器接口类的名称与事件类的名称是相应的,如:MouseEvent事件类的监听器接口名为MouseListener
总结:
处理发生在某个GUI组件上的XxxEvent事件的某种情况,其事件处理的通用编写流程:
1、编写一个实现了XxxEvent接口的事件监听器类
2、XxxEvent类中的用于处理该事件情况的方法中,编写处理代码
3、调用组件的addXxxListener方法,将类XxxListener创建的实例对象注册到GUI组件上。
五、事件适配器
由于监听器实际上就是实现了相应接口的类,而接口一般要求实现许多方法,如接口WindowListener中有7种方法,并不是所有的方法都是需要的,若实现该接口则要求实现所有的抽象方法。为了简化,java语言为一些接口提供了事件适配器(Adapter)。事件适配器是抽象类。通过继承事件适配器,重写需要的方法,不用的方法无须重写。
java.awt.event包中提供了以下几个事件适配器:
ComponentAdapter 组件适配器
ContainerAdapter 容器适配器
FocusAdapter 焦点适配器
KeyAdapter 键盘适配器
MouseAdapter 鼠标适配器
MouseMotionAdapter 鼠标移动适配器
WindowAdapter 窗口适配器
用事件适配器类处理事件,可以简化事件监听器的编写。
六、修改组件的默认事件处理方式
1、只有在一个组件注册了事件监听器对象后,组件才会产生相应的对象
2、默认的processEvent方法调用processXxxEvent方法
3、调用enableEvent(Longevent ToEnable)方法,可以在即使没有注册事监听器的情况下,组件也能够对某些类型事件进行相应和产生相应的事件对象。
七、Graphics类与图形绘制
Graphics类是java图形处理的基础,它支持两种绘图:一种是基本的绘图,如画线、画圆、矩形等;一种是画图像,主要用于动画制作等。
Graphics类代表画笔,提供了一系列的方法类实现基本图形元素的绘制,只要组合使用这些图形绘制方法,就可以得到想要的复杂图形。实际上Graphics类是一个抽象类,他提供的方法大部分都是抽象的方法。常见的有:
draw Line(int x1,int y1,int x2,int y2)画一条直线
drawString(String str,int left,int bottom):写一个字符串
drawImage(Image image,int left,int top,ImageObserver observer):画一个图片
drawOval(int x,int y,int width,int height):画一个椭圆
drawRect(int left,int top,int width,int height):画一个矩形
fillRect(int left,int top,int width,int height):填充一个矩形
fillOval(int x,int y,int width,int height):填充一个椭圆
可以为Graphics对象设置绘图颜色和字体属性,方法为:
setColor(Color color):设置画笔的颜色
setFont(Font font):设置画笔的字体
如果程序没有显示调用Graphics对象的setColor()方法,Graphics对象将以组件的前景色作为默认的绘图颜色。drawString(String str,int s,int y)方法使用当前画笔的颜色和字体,将参数str的内容显示出来,并且最左边的字符的基线从坐标(x,y)开始。drawLine(int x1,int x2,int y1,int y2)表示画出一条直线,坐标(x1,y1)表示直线的起始点,坐标(x2,y2)表示直线的终点。
八、双缓冲技术
1、Component.creatImage方法创建内存Image对象
2、在Image对象上进行绘制的结果就成了一副图像
3、在image对象上执行与组件表面同样的绘制,image对象中的图像是组件表面内容的复制,当组件重画时,只需将内存中的image对象在组件上画出。
九、常用的AWT组件
Canvas组件
1、Canvas是具有最基本和最简单的GUI功能的组件
2、Canvas代表屏幕上一块空白的矩形区域,程序能够在这个部件表面绘图,也能够捕获用户的操作,产生相应的事件
3、当要设计定制的具有GUI功能的组件类时,继承Canvas将会大大简化编程难度。
十、菜单
1、一个完整的菜单系统有菜单条,菜单和菜单项组成
2、java中与菜单相关的类有:MenuBar(菜单条);Menu(菜单);MenuItem(菜单项)
3、setActionCommand方法的作用
十一、Container
1、组件不能独立的显示出来,只能放在容器里
2、Container是所有容器类的父类,Container.add方法用于将组件添加到容器中。
3、Container也是Component的子类,因此也可以作为组件添加到其它容器上。
十二、Dialag与FileDialag类
1、Dialag类用于产生对话框
2、对话框分为模态对话框和非模态对话框:
3、常用的两个构造方法:
public Dialag(Frame owner,String title)
public Dialag(Frame owner,String title,boolean modal)
十三、Checkbox组件
1、checkbox用类建立单选按钮和多选按钮
2、创建多选按钮,只需要使用构造函数:
checkbox(String label,boolean state,CheckboxGroup group)
3、单选按钮和多选按钮的语义事件为ItemEvent,对应的监听器接口为ItemListener,该接口只有一个itemStatsChange方法
十四、Choice
1、Choice类用来制作单选下拉列表框
2、choice类的语义事件为itemEvent,对应的监听器接口为itemListener,该接口只有一个itemStatsChange方法
十五、Panel与ScrollPane类
1、Panel类是一个容器类,用于产生一种特殊的空白面板,可以容纳其它的组件,但不能独立存在。
2、ScrollPane类是一种容器类,用于产生滚动窗口,通过滚动条在一个较小的容器窗口中显示较大的子部件。
布局管理器
1、一个容器中各个组件之间位置和大小关系就称之为布局。java语言提供了布局管理器来管理组件在容器中的布局,而不是直接使用位置坐标来设置各个组件的位置大小。
2、java为了实现跨平台的特性并获得动态的布局效果,将容器内的所有组件的大小、位置、顺序、间隔等交给布局管理器负责,共有5种布局管理器:FlowLayout、BorderLayout、GridLayout、CardLayout、GridBagLayout。所有的容器都会引用一个布局管理器实例,通过它来自动进行组件的布局管理。
3、默认的布局管理器
当一个容器被创建后,它们有相应的默认布局管理器。Window、Frame和Dialag的默认布局管理器是BorderLayout,Panel的默认布局管理器是FlowLayout。
4、流式布局管理器(FlowLayout)
FlowLayout是把组件从左向右、从上向下,一个接着一个的放在容器中,组件之间的默认间隔(水平和垂直)为5个像素,默认的组件对齐方式为居中,组件的大小由布局管理器根据组件的最佳尺寸类决定。
FlowLayout的构造方法如下:FlowLayout(int align,int hgap,vgap)
功能:参数align用类决定组件在每行中相对于容器的边界对齐方式。参数hgap,vgap分别设定组件之间的水平和垂直间隙。
5、边界布局管理器(BorderLayout)
BorderLayout是Window、Frame、Dialog的默认布局管理器,它将容器分成5个区域来安排组件:North、South、East、West、Center。 BorderLayout的构造方法如下: BordreLayout(int hgap,int vgap)
功能:参数hgap和vgap分别设定组件之间的水平和垂直间隙。
6、网格布局管理器(GridLayout)
GridLayout是将容器分为一个个格子,按行依次排列组件,各组件大小相同。
GridLayout的构造方法如下: GridLayout(int rows,int cols,int hgap,int vgap)
功能:rows代表行数,cols代表列数,hgap和vgap规定网格之间的水平和垂直间隙。
7、卡片布局管理器(CardLayout)
CardLayout将界面看成一系列卡片,在任何时候只有一张卡片是可见的,这张卡片占据容器的整个区域。
CardLayout的构造方法:CardLayout(int hgap,int vgap)
功能:参数hgap表示卡片和容器左右边界值之间的间隙,参数vgap表示卡片和容器上下边界的间隙。
8、取消布局管理器
调用Container.setLayout(null)方法取消布局管理器设置,在这种情况下,可以调用Component.setBounds方法来用绝对坐标设置
容器上的每个组件的大小和位置
不适用布局管理器将会给程序带来潜在的问题,当容器大小改变时,所有组件保持原来的大小和位置,导致程序界面“难看”