课程教案
章节名称
第11章图形用户界面编程基础
课程类型
理论课□ 讨论课□ 习题课□ 实验课□ 上机课□ 技能课□ 其他□
授课时间
教学进度
学生考勤
应到: 实到:
请假: 旷课:
教学方法
讲授、板书
目的要求:
理解委托时间处理机制、相互角色及相互关系;理解事件接口与相应适配器类的关系与使用差异;掌握Frame、Panel等容器的使用;掌握Java常用的布局策略;掌握按钮和两种文本部件的使用和事件处理;了解鼠标和键盘事件的处理;
重点难点:
Frame、Panel等容器的使用;Java常用的布局策略;按钮和两种文本部件的使用和事件处理;
课后作业:
P200 2(3);
作业批改记录:
教学后记:
教学过程:
复习:什么是异常,Java中如何自定义异常?
引入:现在软件操作界面大多设计为图形用户界面形式;Java
API提供了大量支持图形用户界面的类,这节我们来具体学习这些类【5分钟】
新课讲授:
1 图形用户界面核心概念【10分钟】
容器---可以容纳GUI部件(按某种布局)
----窗体
、面板
♣ 第1步 创建窗体
Frame f = new Frame(“标题“)
♣ 第2步 创建GUI部件
创建按钮、标签
Button b=new Button(“计数”);
Label dis=new Label(“…0…”);
♣ 第3步 将部件加入窗体容器布局设置
setLayout(new FlowLayout())
♣ 第4步 处理事件
事件源----发生事件
事件处理 ------委托事件处理模型
----委托给事件监听者
事件监听者---处理事件
----符合相应接口要求
事件委托处理—图
button.addActionListener( ActionListener a );
谁作为监听者合适?
---要其actionPerformed中方便访问事件处理相关对象
♣ 区分事件源
编写一个窗体应用程序,在窗体中安排两个文本框,一个标签,两个标记为“+”和“*”的按钮,从两个文本框输入两个数,点击“+”按钮将文本框中两个数进行加法运算,结果显示在标签中;点击“*”按钮将文本框中两个数进行减法运算,结果显示在标签中。
♣ 在动作事件处理代码中区分事件源
♥ 关键代码
public void actionPerformed(ActionEvent e) {
int
x1=Integer.parseInt(f1.getText());
int
x2=Integer.parseInt(f2.getText());
if (
e.getActionCommand().equals(“+”)
)
res.setText(""+(x1+x2));
else
res.setText(""+(x1*x2));
}
♥ 或者
public void actionPerformed(ActionEvent e) {
int
x1=Integer.parseInt(f1.getText());
int
x2=Integer.parseInt(f2.getText());
if (
e.getSource() == b1
)
res.setText(""+(x1+x2));
else
res.setText(""+(x1*x2));
}
♣ 关于事件适配器类
Java中为那些具有多个方法的监听者接口提供了事件适配器类,这个类通常命名为XxxAdapter,在该类中以空方法体实现了相应接口的所有方法
程序员设计可通过继承适配器类来编写监听者类,在类中只需给出关心的方法。
例11-2 处理窗体的关闭
2 容器与布局管理【10分钟】
2.1 FlowLayout(流式布局) 特点:是Panel的默认布局;从上到下、左到右排放,放不下再换至下一行; -----不会改变控件的大小。 按照参数要求安排部件间的纵横间隔和对齐方式
常用方法介绍:
public FlowLayout() 居中对齐方式,组件纵横间隔5个像素。
public FlowLayout(int align, int hgap, int vgap)
3个参数分别指定对齐方式、纵、横间距
public FlowLayout(int align) 参数规定对齐方式,组件纵横间距默认5个像素。
2.2 BorderLayout(边缘或方位布局) ---是Frame的默认布局;将容器内部空间分为东(East)、南(South)、西(West)、北(North)、中(Center)五个区域
控件的大小随容器大小改变。 按照参数要求安排部件间的纵横间隔和对齐方式
• public BorderLayout()
各组件之间的纵横间距为0
• public BorderLayout(int hgap, int vgap)
2个参数分别指定纵、横间距
加入组件:add(方位名字符串, 组件)
String[ ] borders = {"North", "East",
"South", "West", "Center"};
setLayout(new BorderLayout(10, 10));
for(int i = 0; i < 5; i++) {
add(borders[i], new Button(borders[i]));
}
【例 11-4】 实现一个简单的图像浏览器,部署“上一张”、“下一张”两个按钮,单击按钮可前后翻阅图片。
2.3 GridLayout布局
♣ GridLayout构造方法
♣ GridLayout布局—加入组件
2.4 CardLayout布局
♣ CardLayout布局---卡片翻动
3 常用GUI标准组件【10分钟】
3.1 GUI部件概述
Component类(抽象类)常用方法介绍
3.2 文本域(TextArea)和 文本框(TextField)
1、两者之间的区别是什么?
2、常用方法介绍
♣ 练习: 验证密码域只能输入数字字符
public void textValueChanged(TextEvent e) {
String s = pass.getText();
char last=s.charAt(s.length()-1);
if (! Character.isDigit(last)) {
hint.setText("只能是数字,重输:");
pass.setText("");
}
}
【
例11-7】在图形界面中,安排一个文本框和文本域。将文本框键入的字符同时显示在文本域中,也既同步显示。
4 鼠标和键盘事件【10分钟】
4.1 鼠标事件
共有7种情形,用 MouseEvent类的同名静态整型常量标志, 分别是
MOUSE_DRAGGED
MOUSE_ENTERED
MOUSE_EXITED
MOUSE_MOVED
MOUSE_PRESSED
MOUSE_RELEASED
MOUSE_CLICKED
♣ 鼠标事件的处理接口
MouseListener
负责接收和处理鼠标的press(按下)、release(释放)、click(点击)、enter(移入)和exit(移出)动作触发的事件;
MouseMotionListener
负责接收和处理鼠标的move(移动)和drag(拖动)动作触发的事件。
♣ MouseEvent类
public int getX() :返回发生鼠标事件的 X坐标。
public int getY() :返回发生鼠标事件的 Y坐标。
public Point getPoint() :返回
Point对象,也即鼠标事件发生的坐标点。
public int getClickCount() :返回鼠标点击事件的连击次数。
例11-8 高级语义事件和低级语义事件处理示例
4.2 键盘事件
包含 3个,分别对应
KeyEvent类的几个同名的静态整型常量KEY_PRESSED、 KEY_RELEASED、KEY_TYPED。
监听者接口是KeyListener
public void keyPressed(KeyEvent e)
某个键按下时执行。
public void keyReleased(KeyEvent e) 某键被释放时执行。
public void keyTyped(KeyEvent e)
按键被敲击。
KeyTyped 包含keyPressed 和KeyRelased 两个动作
♣ 如何获取击键值
getKeyChar()---获取输入字符(对字符键)
getKeyCode()---获取键的编码(对控制键)
键编码常量
KeyEvent.VK_LEFT) ----按键为左箭头
KeyEvent.VK_RIGHT) ---右箭头
KeyEvent.VK_UP) ----- 向上箭头
KeyEvent.VK_DOWN) ---向下箭头
【例11-9】用键盘事件实现例11-7的同样功能。
例11-10 小方框变色和移动
作业与练习【5分钟】
练习:p198 1;
课后作业:p200 2-4;
♥ 上机实践
1.编写窗体应用程序,统计一个文本域输入文本的行数、单词数和字符数。可在图形界面中安排一个按钮、一个文本域和一个标签,点击按钮开始统计,在标签中显示结果。
2.编写窗体应用程序,安排一个文本框、一个按钮和一个标签,从文本框录入一个数字(0~9),点击按钮将其对应的英文单词(如:zero,one等)显示在标签中。