1.GUI(图形用户界面)和AWT
AWT是窗口框架,它从不同的平台的窗口系统中抽取出共同组件,当程序运行时,将这些组件的创建和动作委托给程序所在的运行平台(并未提供真正的实现),由JVM调用系统本地的图形界面来创建和平台一致的对等体。
所有和AWT编程相关的类都放在java.awt包以及它的子包中,AWt编程有两个基类:Component和MenuComponent。
此外,还有Container和LayoutManger,其中Container是一种特殊的Component,它代表一种容器,可以盛装普通的Component,而LayoutManger则是容器管理其它组件布局的方式。
2.AWT容器
容器Container是Component的子类,AWT主要提供了两种主要的容器类型:
Window:可独立存在的顶级窗口;Frame代常见的窗口,是Window类的子类,初始化时不可见,可用setVisible(true)使其显示出来。
Panel:可作为容器容纳其他组件,但不能独立存在,必须添加到其他容器中。可将Panel对象添加到Frame对象中。
ScrollPane是一个带滚动条的容器,它也不能独立存在,必须被添加到其他容器中。默认使用BorderLayout作为其布局管理器。可用来替换Panel。
3.布局管理器
共5个常用的布局管理器
(1)FlowLayout
从左到右排列,遇到边界即折回下一行(垂直间距,水平间距)
(2)BorderLayout
North,South,East,West,Center(默认布局在Cenetr区域)
(3)GridLayout
横纵线网格(横纵向间距)
(4)GridBagLayout
可设置网格大小(需要GridBagConstraints对象控制组件)
(5)CardLayout
卡片式设计,每次仅可见第一张
(6)BoxLayout
Swing新的布局管理器,垂直和水平摆放,Box容器提供间距Glue,Strut,RigidArea
4.对话框Dialog
对话框通常依赖其他窗口,对话框有模式和非模式两种。如果主程序需要对话框里接收的输入值,则应该把该对话框设置成模式对话框,因为模式对话框会阻塞该程序。
Dialog类还有一个子类FileDialog,代表一个文件对话框,用于打开或保存文件。
FileDialog提供了如下两个方法来获取被打开/保存文件的路径:
getDirectory():获取FileDialog被打开/保存的文件的绝对路径
getFile():获取FileDialog被打开/保存文件的文件名
5.事件处理
三类对象:EventSource(事件源)、Event(事件)、EventListener(事件监听器)
流程为:
- 将事件监听器注册到事件源
- 外部动作(如鼠标)触发事件源上的事件
- 事件源生成事件对象
- 触发事件监听器,事件被作为参数传入事件处理器
- 调用事件处理器做出响应(就是实现某个Listener接口)
AWT的事件类都是AWTEvent类的子类,AWTEvent是EventObject的子类。
AWT事件分为低级事件与高级事件,最常用的就是匿名内部类实现监听器。
6.AWT菜单
MenuItem(菜单项组件),Menu(菜单组件) ,MenuBar(菜单条,菜单的容器)
(1)Menu的add()
组合多个MenuItem —>菜单
(2)MenuBar的add()
组合多个Menu—>菜单条
(3)Frame对象的setMenuBar()
用于添加菜单条
7.在AWT中绘图
在Component类里提供了和绘图有关的三个方法:
paint(Graphics g):绘制组件的外观
update(Graphics g):调用paint()方法,刷新组件外观
repaint():调用update()方法,属性组件外观
8.处理位图
Graphics提供了drawImage方法用于绘制位图,该方法需要一个Image参数(代表位图)。
当需要向GUI组件上绘制图形时,不要直接绘制到GUI组件上,而是先将图形绘制到BufferedImage对象中,然后再调用组件的drawImage方法一次性的将BufferedImage对象绘制到特定组件上。
9.剪贴板
剪贴板相关操作的接口和类被放在java.awt.datatransfer包下:
Clipboard:代表一个剪贴板实例
Transferable:该接口的实例代表放进剪贴板中的传输对象
DataFLavor:用于表述剪贴板中的数据格式
StringSelection:Transferable的实现类,用于传输文本字符串。
传递文本的步骤:
- 创建Clipboard实例,可创建系统剪贴板或本地剪贴板
- 将需要放入剪贴板的字符串封装成StringSelection对象(ImageSelection对象)
- 将StringSelection放入剪贴板中,即setContents()方法
- 取出数据,调用clipboard对象的getdata(DataFlavor flavor)方法
ImageSelection类实现Trandferable接口及接口内的三个方法(因为Transferable接口中只有StringSelection实现类,只能实现字符串)而DataFlavor类中提供imageFlavor常量,表示图像格式的DataFlavor
方法1:构造器,持有一个Image对象
方法2:获取Transferable对象所支持的DataFlavor,即DataFlavor.imageFlavor
方法3:取出Transferable对象里实际的数据。