【java基础】07.GUI:AWT

来源:互联网 发布:cmd查看本机mac 编辑:程序博客网 时间:2024/06/07 04:55
GUIGraphical User Interface),图形用户界面。
 AWTAbstract Window Toolkit),抽象窗口工具集,第一代的Java GUI组件,是重量级的(借助于底层操作系统帮助完成)。
 Swing,不依赖于底层细节,轻量级的组件
Compnent->Container->Panel(放在Window中)、window(Frame,Dialog)
Window有两种形式:Frame(框架)Dialog(对话框)。FrameDialogWindow的子类。Frame是一个带有标题和缩放角的窗口。对话框没有菜单条。尽管他能移动,但不能缩放。
 
Panel包含在另一个容器中,或是在Web浏览器的窗口中。Panel确定一个四边形,其它组件可以放入其中。
 
1.Frames
是Window的子类,具有标题和缩放角;
从容器继承并add方式添加组件,能以字符串规定的标题来创建不可见框架对象(setVisible(true)),先添加组件,最后使其可见。
将BorderLayout作为缺省的布局管理器,可以用setLayout方式改变缺省的布局管理器
继承层次:java.lang.Object->java.awt.Component->java.awt.Container->java.awt.Window->java.awt.Frame
 
2.Panels
为组件提供空间,允许子面板有自己的布局管理器
以add方法添加组件
一旦一个面板对象被创建,为了能看得见,它必须添加到窗口或框架对象上。用Container类中的add()方式可以做到这一点
继承层次:java.lang.Object->java.awt.Component->java.awt.Container->java.awt.Panel
 
3.布局管理器:决定容器里的组件的位置和大小
布局管理器负责决定布局方针以及其容器的每一个子组件的大小。
 
用组件上的setLocation()setSize(),或setBounds()来定位它们在容器里的位置。
BorderLayout FlowLayout GridLayout CardLayout GridBagLayout
3.1空布局管理器
我们可以通过设置空布局管理器,来控制组件的大小和位置。调用setLayout(null)。
在设置空布局管理器后,必须对所有的组件调用setLocation(),setSize()或setBounds(),将它们定位在容器中。
3.2BorderLayout()是Frame类的默认布局管理器
Border布局管理器包括五个明显的区域:东、南、西、北、中
当窗口缩放时,按钮相应的位置不变化,但其大小改变
如不指定组件的加入部位,则默认加入到Center区域,每个区域只能加入一个组件,如加入多个,则先前加入的组件会被遗弃
 
BorderLayout型布局容器尺寸缩放原则
–北、南两个区域只能在水平方向缩放(宽度可调整)
–东、西两个区域只能在垂直方向缩放(高度可调整)
–中部可在两个方向上缩放
 
3.3FlowLayout(流式)从左到右,从上到下
与其它布局管理器不一样,Flow布局管理器不限制它所管理的组件的大小,而是允许它们有自己的最佳大小。
• 默认是居中放置组件
• 如果想在组件之间创建一个更大的最小间隔,可以规定一个界限。
• 当用户对由Flow布局管理的区域进行缩放时,布局就发生变化
构造方法:FlowLayout(对齐方式,组件之间水平间距n个像素,竖直间距m个像素)
 
3.4GridLayout(网格)
Grid布局管理器为放置组件提供了灵活性。用许多行和栏来创建管理程序。然后组件就填充到由管理程序规定的单元中
Grid布局管理器总是忽略组件的最佳大小。所有单元的宽度是相同的,是根据单元数对可用宽度进行平分而定的。同样地,所有单元的高度是相同的,是根据行数对可用高度进行平分而定的
 
3.5CardLayout(网格)
默认布局管理器:Window(Frame,Dialog)是BorderLayout Panel是FlowLayout
 
4.事件:
•-事件-描述发生了什么的对象
•-事件源-事件的产生器    事件源是一个事件的产生者
•-事件处理器-接收事件、解释事件并处理用户交互的方法,JDK1.1的事件模型:委托模型(事件监听器)
委托模型的优点:
–事件不会被意外地处理。
–有可能创建并使用适配器(adapter)类对事件动作进行分类。
–委托模型有利于把工作分布到各个类中。
 
当单击一个按钮时就会产生一个事件(ActionEvent),然后检查是否有与该按钮关联的事件处理器(实际上就是一个方法),如果没有,那么什么都不执行;如果有,就会将该事件传递给与该按钮关联的事件处理器方法,作为该方法的参数,之后该事件处理器方法就会自动得到调用,并且该方法可以使用传递过来的ActionEvent对象,进而获得事件发生时与该事件及事件源相关联的那些信息。
 
Java中的组件若想添加事件处理器,都会使用形如addXxxListener的方法来添加。
多监听:
•多监听者可以使一个程序的不相关部分执行同样的动作
•事件发生时,所有被注册的监听者的处理器都会被调用
一个事件源对应多个处理器-》相当于底层的观察者模式
适配器(Adapter):
•你定义的Listener可以继承Adapter类,而且只需重写你所需要的方法
•为了方便起见,Java语言提供了Adapters类,用来实现含有多个方法的类。这些Adapters类中的方法是空的。
•你可以继承Adapters类,而且只需重写你所需要的方法
 
如果想用作事件监听器的类已经继承了别的类,就不能再继承适配器类了,只能去实现事件监听器接口了
 
1.事件处理机制
事件 事件源 事件处理器(成员方法)
处理发生在某个GUI组件上的xxxEvent事件的某种情况,其事件处理的通用编写流程是:
    1.编写一个实现了xxxListener接口的事件监听器类;
    2.xxxListener类中的用于处理该事件情况的方法中,编写处理代码;
    3.调用组件的addxxxListener方法,将类xxxListener创建的实例对象注册到GUI组件上
事件适配器也可解决上面的问题
2.Graphics类
常用方法:
drawString() 绘制字符串 3个参数: 字符串 X坐标 Y坐标(下标控制位置)
drawOval() 绘制一个空心圆形 4个类型参数: X坐标 Y坐标 宽度 高度(XY表示外切正方形左上角的点)
fillOval() 绘制一个实心圆形 参数同上
drawLine() 绘制一条线 四个参数 起点位置坐标XY 终点位置坐标XY
drawRect() 绘制一个空心矩形 X坐标 Y坐标 宽度 高度
fillRect() 绘制一个实心矩形
drawImage() 绘制一个已经存在的图片,将一个图片直接显示到窗体中 BufferImage image = ImageIO.read(new File("文件名")) (这里文件读取需要try catch)4个参数 image XY坐标 窗体
 
setColor(Color.red) 设置画笔颜色
setFont(new Font("黑体",40,40)) 设置绘制文字的字体(黑体宋体)
 
双缓冲技术


 注:此文档为学习圣思园风中叶教程结合自身学习所记录。
 
 
原创粉丝点击