AWT的基础知识:
GUI全称是Graphical User Interface,即图形用户界面。
JDK中提供了AWT和Swing两个包,用于GUI程序的设计和开发。
GUI组件可以分为两大类:基本组件和容器,分别是java.awt.Component和java.awt.Container的直接或间接子类。
程序的GUI部分由AWT线程管理。
事件处理机制:
事件:用户对组件的一个操作,称之为一个事件。
事件源:发生事件的组件就是事件源。
事件处理器:某个Java类中的负责处理事件的成员方法。
事件分类:
按产生事件的物理操作和GUI组件的表现效果进行分类:MouseEvent WindowEvent ActionEvent。
按事件的性质分类: 低级事件 语义事件(又叫高级事件)
事件监听器:
一个事件监听器对象负责处理一类事件。
一类事件的每一种发生情况,分别由事件监听器对象中的一个方法来具体处理。
在事件源和事件监听器对象中进行约定的接口类,被称为事件监听器接口。
事件监听器借口类的名称与事件类的名称是相对应的,例如,MouseEvent事件类的监听器接口名为MouseListener。
事件适配器:
JDK中也提供了大多数事件监听器接口的最简单的实现类,称之为事件适配器(Adapter)类。
用事件适配器来处理事件,可以简化事件监听器编写。
修改组件的默认事件处理方式:
只有在一个组件上注册了某种事件的事件监听器对象后,组件才会产生相应的事件对象。
默认的processEvent方法调用相应的processXxxEvent方法。
调用enableEvents((long eventsToEnable))方法,可以在即使没有注册事件监听器的情况下,组件也能够对某些类型的事件进行响应和产生相应的事件对象。
编程实例:在一个窗口上显示一个按钮,一旦鼠标移动到这个按钮上时,按钮就移动到了其他位置,这样,鼠标就永远无法点击到这个按钮。
图像显示:
使用Graphics.drawImage(Image img,int x,int y, ImageObserve observer)方法显示图像。
使用 Component.getToolkit.getImage(String path)语句获得Image实例对象。
双缓冲技术:
Component.createImage方法创建内存Image对象。
在Image对象上进行绘制的结果就成了一幅图像。
在Image对象上执行与组件表面同样的绘制,Image对象中的图像是组件表面内容的复制,当组件重画时,只需将内存中的Image对象在组件上画出。
Canvas:
Canvas是具有最基本和最简单的GUI功能的组件。
Canvas代表屏幕上的一块空白的矩形区域,程序能够在这个部件表面绘图,也能够捕获用户的操作,产生相应的事件。
当要设计自定制的具有GUI功能的组件类时,继承Canvas将会大大简化编程难度。
菜单:
一个完整的菜单系统由菜单条、菜单和菜单项组成。
Java中与菜单相关的类主要有:MenuBar(菜单条)、Menu(菜单)、Menultem(菜单项)。
Container:
Container类是所有容器类的父类,Container.add方法用于将组件添加到容器中。
Container也是Component的子类,因此也可以作为组件增加到其它容器上。
Dialog与FileDialog类:
Dialog类用于产生对话框。
模态对话框和非模态对话框。
Dialog类的两个常用构造方法:
public Dialog(Frame owner,String title);
public Dialog(Frame owner,String title,boolean modal)
FileDialog类是Dialog类的一个子类,能够产生标准的文件存取对话框。
Checkbox:
Checkbox类用来建立单选按钮和多选按钮(也叫复选框)。
创建多选按钮,只需要使用构造函数:
Checkbox(String label,boolean state)
创建单选按钮,需要使用构造函数:
Checkbox(String label,boolean state,CheckboxGroup group)
单选按钮和多选按钮的语义事件为ItemEvent,对应的监听器接口为ItemListener,该接口中只有一个itemStateChanged方法。
Choice:
Choice类用来制作单选下拉列表框。
Choice类的语义事件为ItemEvent,对应的监听器接口为ItemListener,该接口中只有一个itemStateChanged方法。
Panel与ScrollPane类:
Panel类是一个容器类,用于产生一种特殊的空白面板,可以容纳其他的组件,但不能独立存在。
ScrollPane类是一种容器类,用于产生滚动窗口,通过滚动条在一个较小的容器窗口中显示较大的子部件。
布局管理器:
一个容器中的各个组件之间的位置和大小关系就称之为布局。
Java语言提供了布局管理器来管理组件在容器中的布局,而不是直接使用位置坐标来设置各个组件的位置和大小。
AWT中的布局管理器类:BorderLayout FlowLayout GridLayout CardLayout GridBagLayout
GridLayout布局管理器将容器划分成若干行列的网络,在容器上添加组件时,它们会按从左到右、从上到下的顺序在网格中排列。
在GridLayout的构造方法中,需要指定在容器上划分的网格的行、列数。
CardLayout布局管理器能够实现将多个组件放在同一容器区域内的交替显示,相当于多张卡片摞在一起,在任何时候都只有最上面的一个可见。
取消布局管理器:
调用Container.setLayout(null)方法取消布局管理器设置,在这种情况下,可以调用Component.setBounds方法来用绝对坐标设置容器上的每个组件的大小和位置。
不使用布局管理器将会给程序带来一个潜在的问题,当容器大小改变时,所有组件仍保持原来的位置和大小,将导致整个程序界面比较“难看”。
Swing和JFC:
所有的Swing组件,位于javax.swing包中,它们是构筑在AWT上层的GUI组件,Swing组件是JComponent类的子类,JComponent又是java.awt.Container的子类。
为保证可移植性,Swing完全用Java语言编写。
Swing提供了比AWT更多的组件库,例如,JTable,JTree,JComboBox。
Swing也增强了AWT中原有组件的功能,例如,与AWT中的Button对应的Swing组件是JButton。
JFC(java Foundation Class)是指Sun对早期的JDK进行扩展的部分,集合了Swing组件和其他能简化开发的API类,包括Swing,java 2D,accessibility,internationalization。
JFrame:
JFrame是与AWT中的Frame相对应的Swing组件。
JFrame上面只能有一个唯一的组件,这个组件为JRootPane,调用JFrame.getContentPane()方法可获得JFrame中内置的JRootPane对象。
应用程序不能直接在JFrame实例对象上增加组件和设置布局管理器,而应该在JRootPane对象上增加子组件和设置布局管理器。
调用JFrame的setDefaultCloseOperation方法,可以设置单击窗口上的关闭按钮时的事件处理方式,例如,当设置值为JFrame.EXIT_ON_CLOSE时,单击JFrame窗口上的关闭按钮,将直接关闭JFrame框架窗口并结束程序运行。
JScrollPane:
JScrollPane是与AWT中的ScrollPane相对应的Swing组件。
最基本的JScrollPane由水平和垂直方向上的JScrollBar、以及一个JViewport组成。
调用JScrollPane.getViewport方法,可以获得代表滚动窗口中的视图区域的JViewport对象。
调用JViewport.setView方法,可以将滚动窗口中要显示的内容作为子组件增加到JViewport。
Swing中的标准对话框:
JOptionPane类提供了若干个showXxxDialog静态方法,可用来产生简单的标准对话框。
showConfirmDialog(Component parentComponent,Object message,String title,int optionType,int messageType)中的每个参数的意义。
JFileChooser类专门用来实现文件存取对话框。
BoxLayout布局管理器:
BoxLayout是在Swing中新增加的一种布局管理器,它允许多个组件全部垂直摆放或全部水平摆放。
学习和开发GUI程序的建议:
重在掌握GUI程序的一些基本原理和开发过程,通过学习AWT组件可以更容易掌握GUI程序的基本原理和开发过程,但在GUI程序开发中,应尽量使用Swing组件。
查阅JDK文档中的Swing包,通读一下其中所包含的组件,以了解Swing提供了哪些GUI组件,但不必去仔细阅读每个组件的具体使用帮助。
只在要用到某个GUI组件时,才有必要仔细阅读这个组件的具体使用帮助。如果要快速掌握某个新遇到的组件的用法,最好是能够找到并参阅该组件的例子程序。
在JDK的demo程序目录中,或是《Java指南》(可从SUN公司的网站上下载,英文名The Java Tutorial)中,都能找到某些组建的应用范例。