java小程序--10-10--北大计算机系java培训讲义.ppt

上传人:本田雅阁 文档编号:2145442 上传时间:2019-02-21 格式:PPT 页数:69 大小:512.51KB
返回 下载 相关 举报
java小程序--10-10--北大计算机系java培训讲义.ppt_第1页
第1页 / 共69页
java小程序--10-10--北大计算机系java培训讲义.ppt_第2页
第2页 / 共69页
java小程序--10-10--北大计算机系java培训讲义.ppt_第3页
第3页 / 共69页
亲,该文档总共69页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《java小程序--10-10--北大计算机系java培训讲义.ppt》由会员分享,可在线阅读,更多相关《java小程序--10-10--北大计算机系java培训讲义.ppt(69页珍藏版)》请在三一文库上搜索。

1、1,第2章 Java小应用,北京大学计算机系 代亚非,本资源由 寒秀草与巧克力 搜集与网络 请您在传播的时候将下载分数设为0 真正体现资源共享的理念 谢谢 更多0分资料去我的文库,2,3,第2章 Java小应用,2.1 所有小应用程序的根源 2.2 小试身手 2.3 图形操作 2.4 URL类 2.5 载入现有图像文件 2.6 动画效果 2.7 播放声音 2.8 小 结,4,2.1 所有小应用程序的根源,2.1.1 小应用的特点 回忆一下小应用程序的书写格式 import java.applet.*; public class MyApplet extends Applet ; applet都

2、继承自java.applet.Applet类,由Sun公司事先定义好了. 每个小应用都有一个主程序类, 之前必须加上public.,5,2.1 所有小应用程序的根源,6,2.1 所有小应用程序的根源,Applet的限制,applet,Browser,SERVER,file,SERVER,local,connection,connection,Applet被下载的,与applet无关的,本地方法,7,2.1 所有小应用程序的根源,2.1.2 applet的生命周期 paint()虽不在生命周期内,但它的作用相当于applet的灵魂,Java.applet.Applet,public void i

3、nit(),public void destroy(),public void start(),public void stop(),public void paint(Graphics g),8,2.1 所有小应用程序的根源,一个applet的可视周期,init,start,stop,destroy,离开web页面,重新装入或改变页面大小或返回Web页面,9,2.1 所有小应用程序的根源,有关paint()方法 Applet本身是一个容器,因此任何输出都必须用图形方法paint() 当小应用首次被装载,以及每次窗口放大、缩小、刷新时都要调用paint方法 paint()是由浏览器调用的, 而

4、不是由程序调用,当程序希望调用paint方法时,用repaint命令 paint方法的参数是Graphics类的对象 g,它在java.awt.Graphics内 paint(Graphicd g)。,10,2.1 所有小应用程序的根源,AWT thread(waiting),update() clear arae call paint(),paint(),repaint(),Exposure,11,2.2 小试身手,2.2.1 起始页上的时间和日期 介绍两个类: 1. 类名:Date 创建一个实例 Date timeNow=new Date(); 2. 类名Font 创建一个实例 Font

5、msgFont=new Font(“TimesRoman”,Font.ITALIC,30);,0Mon Dec 07 14:23:50 GMT+08:00 1998,12,2.2 小试身手,看下面的例子,想一想生命周期的四个方法哪去了?,import java.awt.*; import java.util.Date; public class showDate extends java.applet.Applet Date timeNow=new Date(); Font msgFont=new Font(“TimesRoman”,Font.ITALIC,30); public void p

6、aint(Graphics g) g.setFont(msgFont); g.setColor(Color.blue); g.darwString(timeNow.toString(),5,50); ,13,2.2 小试身手,2.2.2 在起始页中加入applet html中有关的代码 CODEBASE的作用 当class文件与起始页文件不在同一个目录下时,使用CODEBASE说明 CODEBASE=“myjavaclass”,14,2.2 小试身手, CODEBASE=“myjavaclass” ,15,2.2 小试身手,ALIGN,HSPACE,VSPACE,Java applet,其它文

7、字,其它文字,vspace,hspace, vspace=100 hspace=100 ,16,2.2 小试身手,向applet传递参数的两个步骤 1. 在起始页中要有标签 2. 在applet中要有getParameter方法 在起始页中有: 在applet中有: string title=getParameter(rem); 在显示时间的命令中加入title: g.drawString(title+timeNow.toString(),5,50);,17,2.2 小试身手,import java.awt.*; import java.util.Date; public class show

8、Date extends java.applet.Applet Date timeNow=new Date(); String title; Font msgFont=new Font(“TimesRoman”,Font.ITALIC,30);,public void init() title=getParameter (“rem”); if (title=null) title=“”; ,public void paint(Graphics g) g.setFont(msgFont); g.setColor(Color.blue); g.darwString(title+ timeNow.t

9、oString(),5,50); ,18,2.2 小试身手,例:利用一个可以显示运行字符串的类,显示自己的字符串 (htmlpara.html) ,19,2.2 小试身手,public void init() String paramete; parameter=getParameter(“MESSAGE“); if (parameter!=null) message=parameter; parameter=getParameter(“FONT“); if (parameter!=null) font_to_use=parameter; parameter=getParameter(“POI

10、NT_SIZE“); if (parameter!=null) point_size=Integer.parseInt(parameter); ,20,2.3 图形处理,2.3.1图形坐标系统 任何与绘图有关的操作 第一个要用的是 java.awt.Graphics类 Graphics类的对象不是 由new产生的,而是由系 统或其他方式直接将生好的Graphics对象当作方法的参数,再交给程序设计者去处理.例如: paint(Graphics g),21,2.3 图形处理,Graphics的方法 paint(Graphics g) g.clearRect(); g.copyArea(); g.

11、drawAre() ; g.drawLine(); g.drawOval();g.drawRect(); g.drawPolygon(); g.fillArc(); g.fillOval(); g.fillPolygen(); g.fillRect(); g.getColor(); g.getFont() g.setFont(); g.setColor(); g.getFontMetrics() g.fillRoundRect() ,22,2.3 图形处理,2.3.2 字型和颜色的设置 2.3.2.1 字型设置的方法 Font font=new Font(“TimesRoman”,Font.I

12、TALIC,24); g.setFont(font); 在小应用程序中显示输出的方法 g.drawString(String, int x, int y); g.drawChars(char data, int offset, int length, int x, int y);,23,2.3 图形处理,g.drawBytes(byte data,int offset, int length, int x, int y); 例:g.drawString(“This is a test”,5,10); 获取字体的属性 Font font=g.getFont(); Font类中常用的方法 GetF

13、amily() getName() getSize() getStyle() isItalic() isPlain() isBold() toString(),24,2.3 图形处理,import java.awt.Graphics; import java.awt.Font; public class drawtext extends java.applet.Applet Font fn=new Font(“TimesRoman“,Font.ITALIC,20); public void paint(Graphics g) g.setFont(fn); g.drawString(”Font

14、demo”,5,10); ,Font demo,25,2.3 图形处理,获取更详细的数据 请查阅有关FontMetrics类的方法 fontMetrics=getFontMetrics(font); FontMetrics中比较重要的方法有: stringWidth, charWidth, getAscent, getDescent, getLeading, getHeigh,26,2.3 图形处理,2.3.2.2 颜色的调整 Color对象的使用 创造自己的颜色: Color mycolor=new Color(int red, int blue, int green); g.setColo

15、r(Color.yellow) g.setColor(mycolor); 例:随机产生颜色,并画圆,27,2.3 图形处理,import java.awt.Graphics; import java.awt.Color; public class drawcircle extends java.applet.Applet public void paint(Graphics g) int red,green,blue,x; for (x=0;x370;x+=30) red=(int)Math.floor(Math.random()*256); green=(int)Math.floor(Mat

16、h.random()*256); blue=(int)Math.floor(Math.random()*256); g.setColor(new Color(red,green,blue); g.fillOval(x,0,30,30); ,28,2.4 URL类,2.4.2 构造URL类 (全名java.lang.URL) 绝对URL的构造方法: URL(String spec) 例: URL url=new URL (http:/ 相对URL的构造方法: 某绝对地址:http:/ 在该目录下有两个文件 mywork.html myfamily.html,29,2.4 URL类,URL bas

17、e=new URL(“http:/”); URL url1=new (base, “mywork.html”); URL url2=new (base, “mywork.html”); 其他URL的构造方法: URL url=new URL (“http”, “”,“/dyf/test.html”);,30,2.4 URL类,2.4.3 获取小应用程序HTML页面的URL和小应用程序本身的URL URL html=getDocumentBase(); System.out.print(html); URL codebase=getCodeBase(); System.out.print(cod

18、ebase);,31,2.4 URL类,2.4.4 URL异常(MalformedURLException) 当创建URL时发生错误,系统会产生异常 try URL url=new URL(str); catch(MalformedURLException( e) DisplayErrorMessage(); 2.4.5 URL类的基本方法 String getProtocol(), String getHost(), ing getPort(), String getFile(), String getRef(),32,2.4 URL类,构造URL的实例,import .URL; impor

19、t .MalformedURLException; public class Test URL url1,url2,url3; void test() try url1= new URL(“file:/D:/image/example.gif”); url2= new URL(“http:/ url1= new URL(url2, “hit.gif”); catch (MalformedURLException e); /处理例外 ,33,2.5 载入现有图像文件,Image类 java支持gif和jpg两种格式的图像 图像文件的URL: URL picurl= new URL (“http:

20、/xxx.yyy.edu/Applet/img1.gif”); 取一幅图像构成图像对象 Image img1 = getImage(picurl); Image img2 = getImage(getCodeBase(), “img2.gif”);,34,2.5 载入现有图像文件,显示一幅图像: g.drawImage(img1, x, y, this); g.drawImage(img1, x, y,Color.red, this); g.drawImage(image1, x, y,x2,y2,Color.red, this);,规定背景,规定尺寸,35,2.5 载入现有图像文件,完整的过

21、程,在类中,在init0中,在paint0中,36,2.5 载入现有图像文件,import java.applet.*;import java.awt.*; public class image extends Applet Image img; public void init() img=getImage(getCodeBase(),“img0001.gif“); public void paint(Graphics g) int width=img.getWidth(this); int height=img.getHeight(this); g.drawRect(52,52,width

22、+30,height+30); g.drawImage(img,57,57,width+20,height+20,this);,37,2.6 动态效果-线程的应用,2.4 动态效果-线程的应用 什么是线程? 线程是执行中的程序中的单个顺序控制流. Java支持多线程,38,2.6 动态效果-线程的应用,静态的情况 import java.applet.*; import java.awt.Graphics; public class maguee extends Applet public void paint(Graphics g) g.drawString(“Hello, Java!“,0

23、,0); ,39,2.6 动态效果-线程的应用,动态的情况(不是多线程) public void init() x=size().width; y=size().height/2; width=x; public void paint(Graphics g) while(true) g.drawString(“Hello, Java!“,x,y); x-=10; if(x0) x=width; ,40,2.6 动态效果-线程的应用,实现一个线程,让Applet类去实现Runable接口,创建一个线程类,改写方法start,在其中产生一个新的线程来工作,改写stop方法,在其中编写结束线程的程序

24、代码,引入新的方法,将分给线程的工作写到run中,41,2.6 动态效果-线程的应用,第一步:实现Runable接口 public class xc extends java.applet.Applet implements Runnable Thread smallthread=null; Thread是一个类,只有是它的实例才能具有线程的功能 主函数中要定义一个线程变量,42,2.6 动态效果-线程的应用,第二步:改写方法start public void start() if(smallthread = null) smallthread= new Thread(this); small

25、thread.start(); /从现在开始程序由两个线程在执行 第三步:改写stop方法 public void stop() smallthread.stop(); /停止线程 smallthread = null; /释放线程对象,43,2.6 动态效果-线程的应用,第四步:新的方法run 将让线程要做的事放run中 public void run() while (true) repaint(); try Thread.sleep(1000); catch(InterruptedException e) ,44,2.6 动态效果-线程的应用,import java.applet.*;

26、import java.awt.Graphics; public class MovingCharacter extends Applet implements Runnable int x=200; Thread my_thread=null; /- public void start() my_thread=new Thread(this); my_thread.start(); ,public void run() while(true) repaint(); try Thread.sleep(100); catch(InterruptedException e) ,45,2.6 动态效

27、果-线程的应用,.,public void paint(Graphics g) g.drawString(“Hello, Java!“,x,y); x-=10; if(x0) x=200; ,public void stop() my_thread.stop(); ,46,2.6 动态效果-线程的应用,跳动的小球,up=false; x=x-10; if(xheight) up=false; g.setColor(Color.red); g.fillOval(x,y,30,30);,47,2.6 动态效果-线程的应用,例:起始页上的小时钟 一个必须用到的类-Date类,给出系统时间 Date

28、NowTime=new Date(); NowTime.getHours(), NowTime.getMinutes() 自己需要写什么样的类? Clock-把数字时间成图形表示,(Hour*60*60+minute*60+second)/43200*2.0*PI,(minute*60+second)/3600*2.0*PI,second/60*2.0*PI,48,2.6 动态效果-线程的应用,49,2.6 动态效果-线程的应用,class Clock int hours,minutes,second,radius; Clock(int hrs,int min,int sec) hours=h

29、rs%12; minutes=min; second=sec; void show(Graphics g, int x, int y,int redius) int hrs_len=(int)(radius*0.5); int min_len=(int)(radius*0.7); int sec_len=(int)(radius*0.85); double theta; g.drawOval(x ,y, radius*2, radius*2);,50,2.6 动态效果-线程的应用,theta=(double)(hours*60*60+minutes*60+second)/ 43200.0*2.

30、0*Math.PI; drawNiddle(g,Color.blue, x, y, hrs_len, theta); theta=(double)(minutes*60-second)/3600.0*2.0*Math.PI; drawNiddle(g,Color.blue, x, y, min_len,theta); theta=(double)second/60.0*2.0*Math.PI; drawNiddle(g,Color.red, x, y, sec_len, theta); ,51,2.6 动态效果-线程的应用,private void drawNiddle(Graphics g,

31、 Color c, int x, int y, int len, double theta) g.setColor(c); g.drawLine(x,y,(int)(x+len*Math.sin(theta), (int)(y-len*Math.cos(theta); ,52,2.6 动态效果-线程的应用,import java.awt.*;import java.util.Date; public class ClockDemo extends java.applet.Applet public void paint() Date timeNow = new Date(); Clock my

32、Clock = new Clock(timeNow.getHours(), timeNow.getMinutes(), timeNow.getSeconds(); myClock.show(g,100,100,100); ,53,2.6 动态效果-线程的应用,生成时间对象,取时间 生成Clock对象,将时间传递给Clock对象,paint() ,主类,54,2.6 动态效果-线程的应用,主类,start(),stop(),run(),paint(),换算弧度,画图,clock类,clock(),初始化,Show(),drawNiddle(),启动新线程,停止线程,生成clock类实例,repa

33、int(),55,2.6 动态效果-线程的应用,例: 在主页上显示 字符串并且颜色从左至右不断变化 让我们来想一想: 需要那些数据成员? String msg, Font fnt, Color clr, spot_clr; Thread thread; String Msg=“Welcome to HIT“; 需要哪些方法? init, start, stop, run, paint; public void init() fnt= new Font(“TimeRoman“,Font.PLAIN,30); clr=new Color(255,0,0); spot_clr=new Color(0

34、,0,255); Thread thread;,56,2.6 动态效果-线程的应用,run()中做什么? 反复调用repaint public void run() while(true) repaint(); tryThread.sleep(50); catch(InterruptedException e) ,57,2.6 动态效果-线程的应用,paint()中做什么? 输出两次字符串,第一次用一种颜色,第二次用另一种颜色(该颜色只作用于指定的区域 ) g.clipRect(x,y,width,height) public void paint(Graphics g) FontMetric

35、s fntM=g.getFontMetrics(); int font_height=fntM.getHeight(); int base_line=size().height/2+font_height/2;,You are Welcome to HIT,58,2.6 动态效果-线程的应用,g.setFont(fnt); g.setColor(clr); g.drawString(Msg,0,base_line); g.clipRect(strPt-50,0,str_bk_size,size().height); g.setColor(spot_clr); g.drawString(Msg,

36、0,base_line); strPt=(strPt+1)%(size().width+100); ,59,2.6 动态效果-线程的应用,在Java中播放动画 1.需要多张图片 2 调用图片的方法? getImage, 3.将多幅图像存入图像对象数组 Image frame=new Image10; for (int i=0;iframe.length;i+) framei=getImage(getCodeBase(), “pic”+i+ “.gif”); 4. 显示图像 drawImage(x,y,0,0,this),60,2.6 动态效果-线程的应用,import java.awt.*;

37、public class nina extends java.applet.Applet implements Runnable Image frame; Thread threadNina; int frame_i; int delay_time; public void init() frame=new Image10; threadNina=null; frame_i=0; for (int i=0;iframe.length;i+) framei=getImage(getCodeBase(), “pic“+i+ “.gif“); ,61,2.6 动态效果-线程的应用,public vo

38、id paint(Graphics g) g.drawImage(frameframe_i,0,0,this);,public void run() while(true) repaint(); try Thread.sleep(100); catch(InterruptedException e) frame_i=(frame_i+1)%frame.length; ,62,2.7 播放声音,java支持au格式的声音 两个方法: void play(URL url) void play(URL url, String name) 例:play(getCodeBase(), “boing.au

39、”); (注:它是一次性的) 如果想反复播放怎么办? 借用类AudioClip(loop(),play(),stop(),63,2.7 播放声音,例:AudioClip bg_sound= getAudioClip(getCodeBase(), “boing.au”); bg_sound.play(); 或: bg_sound.loop();,import java.applet.AudioClip; public class audio extends java.applet.Applet AudioClip sound=getAudioClip(getCodeBase(),“boing.a

40、u“); public void start() my_sound.loop(); public void stop() if(my_sound!=null) my_sound.stop();,64,2.7 播放声音,图像加声音岂不是更有吸引力 1. 在init中既取图像也取声音片断 framei=getImage(getCodeBase(), “img000“+i+“.gif“); SoundClip=getAudioClip(getCodeBase(),“boing.au“); 2. 在init中加入 SoundClip.loop(); 3. 在stop中加入 if (SoundClip!

41、=null) SoundClip.stop();,65,2.8 可通用的代码,同时包含main()方法和 init()方法 由于application本身不是图形环境,因此需要在程序中加入图形环境,以便可以作为普通的application使用 import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.util.*;,66,2.9 小结,小应用程序是在浏览器中运行的,每个小应用程序中必须有一个主类,冠以public,并且继承自java.applet. 小应用程序包括生命周期的四个环节和pa

42、int() 根据程序要求,用户可以在主类中定义其它方法,或定义其它类. public class myapplet extends Applet init() ;start() ; stop() ;destroy() ; paint(Graphics g) myclass1;class myclass2;,67,2.9 小结,applet 主类,init(),start(),paint(),stop(),destroy(),自定义方法,applet启动后第一个被执行,在此初始化,init()后被执行,程序主要代码写在此,start()后被执行,写与输出有关的代码,浏览器变换页面时执行,可以省略

43、重写,浏览器关闭时执行,可以省略重写,不能自动被执行,可以由前三个方法调用.例如: start() mymethod(),Classes,mymethod1,mymethode2,Classes myclass =new Classes() myclass.method1();,.,.,68,2.9 小结,class Myclass int v1; method(int num) v1=num; ,test1,public class Demo extends Applet public void init() Myclass test1=new Myclass(); test1.method

44、(20); Myclass test2=new Myclass(); test2.method(10); ,v1,test2,v1,20,10,内存,69,2.9 小结,线程是实现动态效果的核心,运行线程必须继承Thread类或者实现Runable接口. run 是线程的主体,它反复调用repaint()方法,其中必须有休眠sleep(). sleep()语句要捕获中断异常(右面讲) tryThread.sleep(100); catch(InterruptedException e) 有线程的小应用,start(),stop()方法必须重写. 需要获取网络资源时(包括本地资源),要用URL类,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1