GUI图形用户界面
2007-06-05
GUI图形用户界面:Graphis User Interface计算机和用户进行交互的界面。
Java.awt.*;
Java.swing.*;
图形用户界面的继承关系
Object |
|
|
Component | 向上继承 | 组件超类 |
Container | 向上继承 | 容器(所有组件添加是通过容器进行管理的) |
Window | 向上继承 | 窗口 |
Frame | 向上继承 | 视窗(容器组件中的一种) |
JFame | 向上继承 |
|
Fram视窗是一个特殊的组件,一叫作容器组件
按下某个组件,便产生某个事件:
按钮组件 -----事件对象1
单行文本框-----事件对象2
注:不同组件产生的对象是不同的,但按钮和单行文本框在某种情况下所生成事件对象是一致的。
常用事件类型对象:
java.awt.ComponentEvent
ØContainerEvent | 容器事件 |
ØFocusEvent | 焦点事件 |
ØWindowEvent | 窗口事件 |
ØInputEvent | 输入事件 |
§KeyEvent | 键盘事件 |
§MouseEvent | 鼠标事件 |
ØcontainerEvent:容器事件(容器组件改变后生成的事件类型的对象);
ØFocusEvent: 焦点事件(当鼠标的焦点发生改变的过程中所生成的事件类型的对象);
ØWindowEvent 窗口事件(退出应用程序System.exit(0));
ØInputEvent 输入事件(所有输入设备发生改变的过程中所生成的事件类型的对象)
(1) KeyEvent 键盘事件;
(2) MouseEvent鼠标事件;
P193
ActionEvent:当按钮被点击的过程中,或单行文本框点击了回车键的过程当中所生成的事件类型的对象都叫作ActionEvent
##事件委托
什么是事件委托(delegation)处理模型?
组件将事件处理的责任委托给特定的对象,当该组件发生指定的事件时,就通知所委托的对象,由这个对象来处理此事件。这个受委托的对象称为事件监听对象(eventlistener),每个组件都可根据需要指定(注册)一个或多个事件监听对象。
事件委托(delegation)处理模型中的四要素
1、事件源:导致事件发生的组件。(如点击确定按钮)
2、事件:事件源改变时生成的事件对象(当按钮被点击的过程中生成ActionEvent类型的对象)
3、事件监听器(委托机制):针对特定事件的事件监听(类型)对象。(把事件生成的对象传给监听器,接收对象)
4、事件服务程序(实现了监听接口的服务类):事件产生时所执行的程序
//要完全实现监听接口的抽象方法
5、事件服务方法:事件监听接口的抽象方法
//事件产生所要执行的动作要写在事件服务方法中;
1. 接收事件类型的对象;
2. 给出应答代码。
概述:
当事件源发生改变的过程中,就会生成事件类型的对象,交由事件监听器进行处理(事先必须为事件源注册事件监听器),事件监听器就是我们所说的事件委托机制,事件监听器会将接收到的对象委托给事件服务程序进行处理,而事件服务程序中至少会有一个事件服务方法,方法做了两件事,一,接收事件类型的对象,二,给出应答代码。
常用的监听接口
ljava.util.EventListener | 服务方法 |
ØActionListener | ActionPerformed(ActionEvent e) |
ØAdjustmentListener |
|
ØComponentListener |
|
ØContainerListener |
|
ØFocusListener |
|
ØItemListener |
|
例: 为按钮注册事件监听器
import java.awt.*;
import java.awt.event.*;//事件处理
import javax.swing.*;//java.awt的升级版本以J开头的组件封装在javax.swing包中
//javax.swing的组件直接或间接的继承了java.awt包
class GuiDemo implements ActionListener
//本类也就是事件服务程序实现的事件监听接口
{
JFrame jf;//视窗(容器组件)
JButton jb;//按钮
JTextField jtf;//单行文件框
GuiDemo()//构造方法
//对组件进行实例化,加监听接口
{
jf=new JFrame("我的第一个GUI");//实例JFrame视窗对象
jb=new JButton("确定");//生成按钮组件对象,
jtf=new JTextField(10);//单行文本长度不超过10个字符
jb.addActionListener(this);//委托机制
//为按钮注册事件监听器,把接收的对象交由本类也就是事件服务程序)来处理
//方法中必须接收事件服务程序的对象
//有什么类型的监听接口就有什么类型的监听装置
jf.getContentPane().setLayout(new FlowLayout());
//getContentPane()返回容器的对象
//setLayout() 设置此容器的布局管理器。
//new FlowLayout() 流水布局,构造一个新的 FlowLayout,居中对齐,
//默认的水平和垂直间隙是 5 个单位。
jf.getContentPane().add(jtf);//先得到容器,在容器上添加文本和按钮
jf.getContentPane().add(jb);
jf.pack();
//调整此窗口的大小,以适合其子组件的首选大小和布局。
//如果该窗口和/或其所有者仍不可显示,则两者在计算首选大小之前变得可显示。
//在计算首选大小之后,将会验证该 Window。
jf.setVisible(true);//窗体可见
//java.awt 类 Component如果为 true,则显示此组件;否则隐藏此组件
}
int n=0;
public void actionPerformed(ActionEvent e)
//事件服务方法1接收事件类型的对象2应答,设置文本信息
//接受委托
{
n++;
jtf.setText("我的第一个GUI程序!");
if(n%2==0)
{
jtf.setText("ddd ");//设置单行文本框文本信息
}
}
public static void main(String args[])//主方法
{
GuiDemo g=new GuiDemo();
}
}
作业: