L08 图形处理与applet.docx
《L08 图形处理与applet.docx》由会员分享,可在线阅读,更多相关《L08 图形处理与applet.docx(13页珍藏版)》请在冰豆网上搜索。
![L08 图形处理与applet.docx](https://file1.bdocx.com/fileroot1/2023-1/5/7eddab33-5e64-4662-9c23-9d0a5748033a/7eddab33-5e64-4662-9c23-9d0a5748033a1.gif)
L08图形处理与applet
L8《图形处理与Applet》上机手册
1.内容回顾(3-5分钟)
回顾本讲内容?
不要照搬ppt中的课程目标,应该体现自己的水平
窗体绘图主要用到那几个方法?
它们之间的相互调用过程是什么样的?
如何修改窗体中的字体?
Toolkit类的作用是什么?
提供了那些耗用的方法
Graphics类中提供了那些常用的画图方法?
什么是Applet?
Applet的生命周期是什么?
如何在网页中显示Applet功能?
2.上机目标
列出本讲通过上机应该掌握的内容,达到什么要求,不要照搬ppt中的大纲
掌握gui中窗体绘图方法的实现,并理解三个方法之间的调用过程
掌握Toolkit类中的常用方法
掌握classpath环境变量的使用
体验java小应用程序的开发流程,编译并运行
掌握如何使用注释及通过注释生成帮助文档
3.上机任务
列出本讲的所有上机题目,包括指导练习、课堂练习、课外练习
创建一个Frame,设置该Frame的背景颜色为黄色Yellow,设置Title为“画线和字符串示例”。
(30分钟)
实现一个Applet,在该Applet中有两个按钮,分别为“变圆”、“变方”,当我们按按钮后,界面中的图形也会随着发生变化(30分钟)
使用线程与画图实现字符串自屏幕右向左移动(20分钟)
如果要设计一个图形系统,请你设计基本的图形元件(Point,Line,Rectangle,Triangle)的简单实现(40分钟)
实现五子棋的功能,且鼠标左键下棋,鼠标右键是悔棋,但双方最多只能悔三步棋?
4.指导练习
带领学员完成的练习,如安装配置、知识点练习、重点难点
4.1.创建一个Frame,设置该Frame的背景颜色为黄色Yellow,设置Title为“画线和字符串示例”
说明解答步骤,每步的含义及解析
1.创建一个Frame,设置该Frame的背景颜色为黄色Yellow,设置Title为“画线和字符串示例”:
程序运行效果如下
2.技术分析
总体上来说界面还是一个Frame
na.通过setBackground(Color.YELLOW)方法来实现设置窗体背景色
nb.通过重写paint()方法来画直线与写字符串
nc.通过Graphics类中的drawString(str,x,y)方法写字符串
nd.通过Graphics类中的drawLine(x1,y1,x2,y2)方法画线
3.参考代码
importjava.awt.*;
publicclassDrawLineStrextendsFrame{
publicDrawLineStr(){
super("画线和字符串示例");
this.setSize(180,160);
this.setBackground(Color.YELLOW);
this.setVisible(true);
}
publicvoidpaint(Graphicsg){
g.drawString("这是一个字符串",20,40);
g.drawString("这是一个条线段",20,150);
g.drawLine(10,150,150,10);
}
publicstaticvoidmain(Stringargs[]){
newDrawLineStr();
}
}
4.功能扩充
将该程序补充完整,实现窗口关闭事件
4.2.实现一个Applet,在该Applet中有两个按钮,分别为“变圆”、“变方”,当我们按按钮后,界面中的图形也会随着发生变化
1.运行效果如下
2.技术分析
a.本要求是要实现一个Applet,所以必须自己创建的类必须继承Applet。
b.通过触发按钮来实现图形的变化,所以在实现中需要通过gui的事件处理机制,我们可以选择在按钮的基础上实现监听来实现。
当然最简单的就是实现ActionListener接口,并实现actionPerformed方法;
c.如何在窗体中改变显示的图片?
这个需要让图形重新绘画自己,我们可以使用paint()方法来让窗体重新绘画
3.参考代码
importjava.awt.*;
importjava.applet.*;
importjava.awt.event.*;
importjava.awt.event.ActionListener;
importjava.util.EventListener;
publicclassAppletAppextendsApplet
implementsActionListener{
Stringdrawing;
Buttonbutton1;
Buttonbutton2;
publicvoidinit(){
drawing="";
button1=newButton("变圆");
button2=newButton("变方");
this.setLayout(newFlowLayout());
this.add(button1);
this.add(button2);
//this.setBackground(Color.red);
}
publicvoidstart(){
button1.addActionListener(this);
button2.addActionListener(this);
}
/**
*重写paint()方法,实现页面重写
*/
publicvoidpaint(Graphicsg){
if(drawing.equals("circle")){
g.drawOval(50,50,80,80);
}
if(drawing.equals("fang")){
g.drawRect(50,50,80,80);
}
}
/**
*实现按钮监听
*/
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==button1){
drawing="circle";
this.repaint();
}
if(e.getSource()==button2){
drawing="fang";
this.repaint();
}
}
}
4.扩充知识
我们在前面第一次课的时候已经给大家举过一次使用applet的例子,我们说过applet是java小应用程序,而且java小应用程序是一般都是在网页中运行的,如何将一个applet运行在html页面中?
这个就需要在html页面中使用
如下代码,将该程序保存为applet.html文件,运行后,可以在页面中来看到运行的效果
在此处有有两点需要指出:
a.code指定的是要加载的class文件;所以必须是类名.clss;
b.原程序中没有指定包名,所以此处的code也不需要包名,且编译后生成的class文件与html文件放在一个目录下
4.3.使用线程与画图实现字符串自屏幕右向左移动
1.使用线程与画图实现字符串自屏幕右向左移动,运行效果如下
2.技术分析
a.从上图的运行效果我们可以看出,移动的字符串内容是没有变化的,只是相对位置发生了变化;
b.如何在截面中显示字符串,我们在前面已经可以使用g.drawString(s,x,y)来实现;
c.如何动态从右向左变化?
其实只是让x坐标定时发生变化而已,y坐标不变。
那如何定时发生变化?
?
?
我们可以使用线程类实现。
还记得Thread.sleep(100)这个方法吗,可以让程序暂时停止运行0。
1秒。
3.参考代码
importjava.awt.*;
publicclassTestMoveextendsFrame{
intx=160,y=80;
publicTestMove(){
super("字符串动画");
this.setBackground(Color.yellow);
this.setSize(180,160);
}
publicvoidpaint(Graphicsg){
g.setColor(Color.red);
g.drawString("ThisisatestofStringmove...",x,y);
try{
//休眠100毫秒
Thread.sleep(100);
}catch(Exceptione){
}
//x坐标减10,即向左移动
x-=10;
if(x<-160){
x=160;
}
//重新绘画
repaint();
}
publicstaticvoidmain(Stringargs[]){
newTestMove().setVisible(true);
}
}
4.功能扩展
根据上面的提示代码,自己动手,做个复杂点的功能,并能在html页面中运行
5.课堂练习
在上机课由学员自己完成的练习,一般需要给出思路、步骤、重点代码
5.1.如果要设计一个图形系统,请你设计基本的图形元件(Point,Line,Rectangle,Triangle)的简单实现
1.本题考察如下几个编程思想:
1)如何使用Graphics进行基本的画图
2)如果是在一个系统中来实现,那么我们需要将这些常用的方法进行简单的封装,这样可以重用;例如作成可重用组件的方法
3)如果只是个小型系统或功能,我们可以使用鼠标直接在画板上来实现;这样我们需要实现鼠标事件
//画点:
没有直接画点的方法,但如果将直接的开始与结束坐标一样就是一个点
g.drawLine(startX,startY,startX,startY);
//画线
g.drawLine(startX,startY,endX,endY);
//画矩形
g.drawRectintx,inty,intwidth,intheight)
那么在我们的实现中,矩形的长度=endX-startX;宽度=endY-startY
g.drawRect(startX,startY,endX-startX,endY-startY);
//画三角
没有直接画三角的方法,但三角就是三条首尾相连的线组成的
g.drawLine(xa,ya,xb,yb);
g.drawLine(xb,yb,xc,yc);
g.drawLine(xc,yc,xa,ya);
2.部分参考代码
a.在Applet上实现画图,并根据鼠标的起落来实现坐标的值
b.初始化坐标
c.判断鼠标的操作
d.纪录鼠标松开时候的坐标
e.重写panit方法
f.重写update方法,调用paint()方法
g.其他辅助方法
h.启动运行
6.课外练习
由学员课后完成,如花时间较长的题目,面试题,项目中的功能,扩展性内容
6.1.实现五子棋的功能,且鼠标左键下棋,鼠标右键是悔棋,但双方最多只能悔三步棋?
。
。
。
7.常见问题
根据教学或自己备课过程中常碰到的问题及其解决方法
7.1.小应用程序和Application有什么区别
小应用程序指的是applet,applet一般是嵌套在html或jsp中的,作为web项目的客户端使用.
Application是应用程序(项目),可独立运行的.
两者最主要的区别是运行环境不同
。
。
。
8.相关知识
提供与本讲内容的某些知识点相关的参考资料或扩展内容与技术
8.1.无
。
。
。
。