面向对象-教案(第35讲).doc
PAGE5
《面向对象程序设计》教案
第35讲
教学对象
计算机科学技术专业
授课内容
12.5案例学习
课程标准
教学目标
(一)知识目标
熟悉常用组件的使用
掌握常用组件的常见事件处理
(二)能力目标
1.能够在构建图形界面时正确选用组件
2.能够掌握常用组件的常见属性设置
教学方法
采用讲授法、演示法、讨论法、案例教学。
学时及分配(第1学时50分钟)
课堂讲授30分钟
课堂练习20分钟
12.5案例学习——八皇后问题
学时及分配(第2学时50分钟)
课堂讲授20分钟
课堂练习30分钟
12.6案例学习——简单的日历程序
知识点分析
重点:
界面布局
常用组件的属性及事件处理
难点:
常用组件的使用
复杂界面的布局
教学过程设计
内容
方式
问题导入
本节课来综合应用前面学习的GUI知识完成两个综合案例。
内容要点
12.5案例学习——八皇后问题解
1.问题描述
八皇后问题是指在一个8×8格的国际象棋盘上放置8个皇后(每个皇后只能占一个格子),使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
2.运行结果
程序运行后首先显示棋盘,用户单击某个格子将皇后放置到棋盘上,如果某个格子不允许放置皇后,程序显示一个标准对话框,图12-15是一个解。
图12-15八皇后问题的一个解
3.设计思路
使用Swing组件开发八皇后问题求解的基本思路如下:
(1)本案例界面采用网格式布局,每个单元格放置一个按钮,每个按钮根据国际象棋的要求设置背景颜色为黑色和白色。按钮是一个8行8列的数组。
JButton[][]cells=newJButton[8][8];
if((i+j)%2==0){
cells[i][j].setBackground(Color.WHITE);
}else{
cells[i][j].setBackground(Color.BLACK);
}
(2)为了某个格子是否可以放置皇后,定义一个8行8列的布尔型数组,并将每个元素的初值设置为true,表示可以放置皇后,当该格中被放置皇后,将该元素所在行、列以及斜行上的元素值都设置为false,之后就不能在那些格中放置皇后。
(3)在格中放置皇后,我们通过按钮的动作事件处理,当用户单击按钮时,事件处理代码首先判断该格对应的ok数组元素值是否是true,如果是,将按钮的图标设置为皇后,否则弹出对话框,显示“这里不能放皇后!”消息。
(4)放置皇后通过将按钮的图标设置为皇后图片实现,代码如下:
cells[i][j].setIcon(newImageIcon(image\\queen.jpg));
程序运行后,用户通过在棋盘上单击某个格子,如果该格子允许放置皇后,则显示皇后图标,否则显示对话框。
4.代码实现
程序实现代码如下所示。
【程序12-11】EightQueen.java
12.6案例学习——简单的日历程序
1.问题描述
使用Swing有关组件开发一个简单的图形界面的日历程序,要求程序运行显示当前月的日历,通过组合框选择年月,可显示指定年月的日历。
2.运行结果
案例运行结果如图12-16所示。
图12-16简单日历程序
3.设计思路
该日历程序是一个图形界面应用程序:
(1)使用JFrame框架创建窗口界面,它的布局采用BorderLayout边界式布局,显示年月列表的组件使用两个组合框ComboBox,并将它们添加到一个面板对象上,面板对象添加到窗口的上方。下面显示日期部分也是一个面板对象,但它的布局设置为网格式布局。日期存放到一个标签数组中,根据年月的不同将标签的文本设置为不同的日期。
(2)为组合框定义事件监听器,当组合框的年或月改变时,根据年月的日期改变标签数组中显示的日期。
(3)日期使用LocalDate类计算,下面代码根据用户选择的年月创建每月的第一天日期,计算该月的天数以及第一天是星期几。
inty=
Integer.parseInt(((String)(year.getSelectedItem())).substring(0,4));
intm=
Integer.parseInt(((String)(month.getSelectedItem())).substring(0,2));
vardates=LocalDate.of(y,m,1);
vardaysOfMonth=dates.len