一.AWT(abstract window toolkit)
1.用于java application GUI编程
2.GUI的各中元素(如:窗口、按钮、文本框等)由java类来实现
3.awt涉及的类在java.awt包及其子包中
awt是旧的图形开发包,因为虽说是跨平台但在各操作系统上的图形表示有区别
swing是新的图形开发包,其包下的类大都是对awt的类重写,名字多以J开头,如JFrame
4.Container和awt中的两个核心类
5.说明图
二.Component&Container
1.java的图形用户界面基本的组成部分是Component
2.一般的Component对象不能独立的显示,必须放到Container对象中才可显示
3.Container可以容纳Component,因为Container同时也是Component,所以Container也可以容纳Container.
4.Container使用add(..)方法添加Component
5.常用的两种Container:
Window:作为顶级窗口独立存在
Panel:可容纳其他Component,但必须被添加到其他窗口(Window或Applet)才能显示.
Frame:
1.Frame是Window的子类,由Frame或其子类创建的对象为一个窗体
2.Frame的构造方法
Frame()
Frame(String s)创建标题栏为字符串s的窗口
3.其他方法
setBounds(int x,int y, int width,int height)//位置和大小
setSize(int width,int height)//大小
setLocation(int x,int y)//位置
setBackground(Color c)//背景颜色.Color类有很多常量可以使用,(x,y,z)表示颜色红绿蓝分量
setVisible(boolean b)//是否可见
setTitle(String name) String getTitle()//标题
setResizable(boolean b)//是否可调整大小
练习1:创建一个Frame对象,并给它赋值
练习2:继承一个Frame的新类,要求一个静态变量统计创建的对象数目,以及其构造函数可以接收多个参数来初始化这个对象,一次显示四个对象
Panel:
1.可以容纳Component
2.可以拥有自己的布局管理器
3.构造方法
Panel()默认的的布局管理器是FlowLayout
Panel(LayoutManager mgr)//指定布局管理器来初始化
4.从父类继承的方法
setBounds(int x,int y, int width,int height)
setSize(int width,int height)
setLocation(int x,int y)
setBackground(Color c)
setLayout(LayoutManager mgr)//指定布局管理器
练习1:将一个Panel添加到Frame中,注意一下Panel的位置
练习2:将四个Panel添加到Frame中,用颜色来区分,排成两行两列
三.布局管理器
1.布局管理器可以管理Component在Container中的布局,不必直接设置Component的位置和大小
2.每个Container都有一个布局管理器对象,当容器需要对某个组件进行定温或判断其大小尺寸时,就会调用其对应的布局管理器,调用Container的setLayout方法改变布局管理器对象
3.常见的五种布局管理器(实现LayoutManager)
(1)FlowLayout
不改变组件大小,按组件原有尺寸显示组件,可设置不同组件间距,行距以及对齐方式
是Panel类的默认布局管理器,默认对其方式为居中
对组件逐行定温,行内从左到右,一行排满后换行
构造方法:
new FlowLayout(FlowLayout.Right,20,40)//设置对齐方式、水平和垂直间距
new FlowLayout(FlowLayout.Right)//默认水平和垂直间距为5像素
new FlowLayout()//默认居中的对齐方式,水平和垂直间距为5像素
(2)BorderLayout
将整个容器分"东西南北中"五个区域,"南北"在水平方向伸缩,"东西"在垂直方向伸缩,"中"可向水平和垂直方向伸缩
是Frame类的默认布局管理器
如果不指定组件添加到哪个区域,则默认加入到"中"区
每个区域只能加入一个组件,如果多加则先前加入的会被覆盖
(3)GridLayout
将空间划分成规则的矩形网格,每个单元的区域大小都一样。
组件被添加到每个单元格中,先中左到右,再从上到下
构造方法:
GridLayout(3,4)
(4)CardLayout
(5)GridBagLayout
四.事件监听
1.Listener
事件模型在awt、swing、jsf和webWork上都有应用
事件模型的原理与钩子函数、回调函数类似
2.Adapter
对于的监听器,也有对应的适配器
使用适配器可以避免监听器类定义没有必要实现的空方法
五.JAVA图形
1.TextField、Label、Button
学习一个类,办法是写一个测试类测试属性和方法
练习:编写一个运算器,按"="按钮将两个文本框的值相加,然后显示到第三个文本框,分别使用门面模式或内部类实现监听器接口
门面模式:通过一个类的引用可以取得该类的属性和方法
2.Graphics
每个Component都有一个paint(Graphics g)实现绘图目的,每次重画该Component时都自动调用paint方法
repaint--调用-->update()--调用--paint()
Graphics类中提供了许多绘图方法,如:
drawRect(int x,int y,int width,int height)
fillRoundRect(int x,int y,int width,int height)
六window事件
事件-事件监听器-事件监听器的命名:XxxEvent-XxxListener-XxxAdapter
MouseEvent-MouseListener-MouseAdapter
WindowEvent-WindowListener-WindowAdapter
练习:测试键盘事件
七内部类:
内部类分成员内部类(作为包装类的成员变量)和匿名类(位于方法参数,例如关闭窗口等执行一次的操作)
非常方便的访问包装类的成员变量或成员方法
不允许或不需要其他类进行访问
当一个类需要实现两个接口,而这两个接口有同样的方法需要实现,则可以在类添加一个内部类来实现不同的接口