实验6-图形化用户界面编程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验6 图形用户界面编程
6.1 实验目的
(1) 掌握图形用户界面的布局设置;
(2) 掌握事件驱动编程的特点,如何区分事件源。
(3) 掌握文本框、文本域、标签、按钮等部件的操作方法。
6.2 知识要点
6.2.1 awt包简介
(1)java.awt包可用于编写Java Application和Applet的图形界面。
(2) AWT组件层次关系见图11-1,所有的GUI标准组件都是AWT包中的根类
Component(构件)类的子类。
6.2.2 容器、布局和部件
(1)容器
Container是Component的子类,具有构件的所有性质,并且能放置其他容器和构件。
●一个容器能容纳若干构件;
●调用容器对象的add方法将构件加入到容器中;
●窗体(Window)容器在不同的操作平台上显示不同的外观。
●面板(Panel)容器是没有标题和边框的透明容器,不能单独存在,必须加入窗体
等其他容器中使用。
(2)各类GUI部件的特点
●按钮(Button):单击产生ActionEvent事件
●复选框(Checkbox):选择时产生ItemEvent事件
●复选框组(CheckboxGroup):只能选一,单选;
●下拉列表(Choice):只能选1项;
●列表(List):可以选多项;
●文本框(TextField):只能显示一行,按回车触发ActionEvent;
●文本域(TextArea):显示多行文本。
●画布(Canvas):只能绘图,处理鼠标和键盘事件。
●窗体(Frame):顶级容器,关闭时触发WindowEvent;
●面板(Panel): 可进行嵌套布局的容器,面板作为一个部件加入到窗体容器中,面
板作为容器又可以放其他面板和部件。
●对话框(Dialog):包括模式和非模式两类,依赖其他窗体。
●文件对话框(FileDialog):用于打开和关闭文件。
●菜单(Menu)、菜单条(MenuBar)和菜单项(MenuItem):只能对Frame创建菜
单,菜单条中添加菜单,菜单中可以添加菜单项或子菜单。
(3)布局
Java通过布局管理器对所有构件进行管理,以支持跨平台的动态布局效果。常见布局管理器有5种,见表11-1所示。
表11-1 常见布局管理器及特点
6.2.3 事件处理
(1) 事件处理机制
●涉及对象有事件源、事件、事件处理者(监听者)。事件源是发生事件的对象;事件对象是提供事件相关信息的对象;事件处理者则是消化事件,完成特定处理的对象。
●Java采用委托(授权)事件处理机制;事件源对其可能发生的事件分别授权不同的事件处理者处理;通过如下命令注册监听者:
addXXXListener(XXXListener a);
其中,XXX与相应事件类型相关,例如:按钮点击动作事件对应标记为“Action”.
要注销监听者使用removeXXXListener(XXXListener a);
●事件处理者必须实现某类事件相对应的接口,只有符合接口规范的对象才能作为事件处理者,通过编写相应方法实现事件的处理。
例如,ActionListener接口中定义了如下方法用来处理事件。
public void actionPerformed(ActionEvent e);
●Java为每类事件提供了一个相应的接口。
(2) 事件与事件处理
●java.util.EventObject是所有事件类的父类;java.awt.AWTEvent是所有AWT事件类的父类,其包括低级事件和基于语义的高级事件。
●XXXEvent对应的事件处理接口通常为XXXListener,但鼠标事件(MouseEvent)对应的事件处理接口有两个,一个是MouseListener,另一个是MouseMotionListener,它们分别用来处理鼠标的移动(含拖动)与鼠标的点击动作。各类接口的事件处理方法见表11-2。
表11-2 AWT事件接口及处理方法
●事件适配器
Java中为那些具有多个方法的监听者接口提供了事件适配器类,这个类通常命名为XxxAdapter,在该类中以空方法体实现了相应接口的所有方法,程序员设计可通过继承适配器类来编写监听者类,在类中只需给出关心的方法,从而减轻工作量。
●在事件处理代码中区分事件源
在事件处理代码中可通过相应的方法得到事件源对象或与事件源相关的信息,见表
11-3,通过这些信息可区分事件源。
表11-3 在事件处理代码中区分事件源
6.3 样例程序
样例1:在应用程序窗体中安排1个文本框,一个标签。在文本框输入一个数字(0-9),按回车键,在标签处显示对应的英文单词。 0---zero,1---one,....
【参考程序】
import java.awt.*;
import java.awt.event.*;
public class myFrame extends Frame implements ActionListener {
Label res;
TextField my;
String
word[]={"zero","one","two","three","four","five","six","seven","eight",
"nine","ten"};
public myFrame (){
my =new TextField(20);
res=new Label(" 英文单词 ");
setLayout(new FlowLayout());
add(my); add(res);
my.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
String s=my.getText();
int n=Integer.parseInt(s);
res.setText( word[n] );
}
public static void main(String args[]) {
Frame my= new myFrame();
my.setSize(300,300);
my.setVisible(true);