第2章Java小应用.ppt

上传人:本田雅阁 文档编号:2596665 上传时间:2019-04-15 格式:PPT 页数:68 大小:226.01KB
返回 下载 相关 举报
第2章Java小应用.ppt_第1页
第1页 / 共68页
第2章Java小应用.ppt_第2页
第2页 / 共68页
第2章Java小应用.ppt_第3页
第3页 / 共68页
亲,该文档总共68页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第2章Java小应用.ppt》由会员分享,可在线阅读,更多相关《第2章Java小应用.ppt(68页珍藏版)》请在三一文库上搜索。

1、1,第2章 Java小应用,北京大学计算机系 代亚非,2,第2章 Java小应用,2.1 所有小应用程序的根源 2.2 小试身手 2.3 图形操作 2.4 URL类 2.5 载入现有图像文件 2.6 动画效果 2.7 播放声音 2.8 小 结,3,2.1 所有小应用程序的根源,2.1.1 小应用的特点 回忆一下小应用程序的书写格式 import java.applet.*; public class MyApplet extends Applet ; applet都继承自java.applet.Applet类,由Sun公司事先定义好了. 每个小应用都有一个主程序类, 之前必须加上public.

2、,4,2.1 所有小应用程序的根源,5,2.1 所有小应用程序的根源,applet,Browser,SERVER,file,SERVER,local,connection,connection,Applet被下载的,与applet无关的,本地方法,6,2.1 所有小应用程序的根源,2.1.2 applet的生命周期 paint()虽不在生命周期内,但它的作用相当于applet的灵魂,Java.applet.Applet,public void init(),public void destroy(),public void start(),public void stop(),public v

3、oid paint(Graphics g),7,2.1 所有小应用程序的根源,一个applet的可视周期,init,start,stop,destroy,离开web页面,重新装入或改变页面大小或返回Web页面,8,2.1 所有小应用程序的根源,有关paint()方法 Applet本身是一个容器,因此任何输出都必须用图形方法paint() 当小应用首次被装载,以及每次窗口放大、缩小、刷新时都要调用paint方法 paint()是由浏览器调用的, 而不是由程序调用,当程序希望调用paint方法时,用repaint命令 paint方法的参数是Graphics类的对象 g,它在java.awt.Gra

4、phics内 paint(Graphicd g)。,9,2.1 所有小应用程序的根源,AWT thread(waiting),update() clear arae call paint(),paint(),repaint(),Exposure,10,2.2 小试身手,2.2.1 起始页上的时间和日期 介绍两个类: 1. 类名:Date 创建一个实例 Date timeNow=new Date(); 2. 类名Font 创建一个实例 Font msgFont=new Font(“TimesRoman”,Font.ITALIC,30);,0Mon Dec 07 14:23:50 GMT+08:0

5、0 1998,11,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 paint(Graphics g) g.setFont(msgFont); g.setColor(Color.blue); g.darwString(ti

6、meNow.toString(),5,50); ,12,2.2 小试身手,2.2.2 在起始页中加入applet html中有关的代码 CODEBASE的作用 当class文件与起始页文件不在同一个目录下时,使用CODEBASE说明 CODEBASE=“myjavaclass”,13,2.2 小试身手, CODEBASE=“myjavaclass” ,14,2.2 小试身手,ALIGN,HSPACE,VSPACE,Java applet,其它文字,其它文字,vspace,hspace, vspace=100 hspace=100 ,15,2.2 小试身手,向applet传递参数的两个步骤 1.

7、 在起始页中要有标签 2. 在applet中要有getParameter方法 在起始页中有: 在applet中有: string title=getParameter(rem); 在显示时间的命令中加入title: g.drawString(title+timeNow.toString(),5,50);,16,2.2 小试身手,import java.awt.*; import java.util.Date; public class showDate extends java.applet.Applet Date timeNow=new Date(); String title; Font

8、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.toString(),5,50); ,17,2.2 小试身手,例:利用一个可以显示运行字符串的类,显示自己的字符串 (htmlpara.html) ,18

9、,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(“POINT_SIZE“); if (parameter!=null) point_size=Integer.parseInt(parameter); ,19,

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

11、Arc(); g.fillOval(); g.fillPolygen(); g.fillRect(); g.getColor(); g.getFont() g.setFont(); g.setColor(); g.getFontMetrics() g.fillRoundRect() ,21,2.3 图形处理,2.3.2 字型和颜色的设置 2.3.2.1 字型设置的方法 Font font=new Font(“TimesRoman”,Font.ITALIC,24); g.setFont(font); 在小应用程序中显示输出的方法 g.drawString(String, int x, int y

12、); g.drawChars(char data, int offset, int length, int x, int y);,22,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类中常用的方法 GetFamily() getName() getSize() getStyle() isItalic() isPlain() isBold() toStrin

13、g(),23,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 demo”,5,10); ,Font demo,24,2.3 图形处理,获取更详细的数据 请查阅有关FontMetrics类的方法 fontMetric

14、s=getFontMetrics(font); FontMetrics中比较重要的方法有: stringWidth, charWidth, getAscent, getDescent, getLeading, getHeigh,25,2.3 图形处理,2.3.2.2 颜色的调整 Color对象的使用 创造自己的颜色: Color mycolor=new Color(int red, int blue, int green); g.setColor(Color.yellow) g.setColor(mycolor); 例:随机产生颜色,并画圆,26,2.3 图形处理,import java.aw

15、t.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(Math.random()*256); blue=(int)Math.floor(Math.random()*256); g.setColor(new Col

16、or(red,green,blue); g.fillOval(x,0,30,30); ,27,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,28,2.4 URL类,URL base=new URL(“http:/”); URL url1=new (base, “mywork.html”); URL url2=new (base,

17、 “mywork.html”); 其他URL的构造方法: URL url=new URL (“http”, “”,“/dyf/test.html”);,29,2.4 URL类,2.4.3 获取小应用程序HTML页面的URL和小应用程序本身的URL URL html=getDocumentBase(); System.out.print(html); URL codebase=getCodeBase(); System.out.print(codebase);,30,2.4 URL类,2.4.4 URL异常(MalformedURLException) 当创建URL时发生错误,系统会产生异常 t

18、ry URL url=new URL(str); catch(MalformedURLException( e) DisplayErrorMessage(); 2.4.5 URL类的基本方法 String getProtocol(), String getHost(), ing getPort(), String getFile(), String getRef(),31,2.4 URL类,构造URL的实例,import .URL; import .MalformedURLException; public class Test URL url1,url2,url3; void test()

19、try url1= new URL(“file:/D:/image/example.gif”); url2= new URL(“http:/ url1= new URL(url2, “hit.gif”); catch (MalformedURLException e); /处理例外 ,32,2.5 载入现有图像文件,Image类 java支持gif和jpg两种格式的图像 图像文件的URL: URL picurl= new URL (“http:/xxx.yyy.edu/Applet/img1.gif”); 取一幅图像构成图像对象 Image img1 = getImage(picurl); I

20、mage img2 = getImage(getCodeBase(), “img2.gif”);,33,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);,规定背景,规定尺寸,34,2.5 载入现有图像文件,完整的过程,在类中,在init0中,在paint0中,35,2.5 载入现有图像文件,import java.applet.*;import java.awt.

21、*; 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+30,height+30); g.drawImage(img,57,57,width+20,height+20,this);,36,2.6 动态效果-

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

23、ze().height/2; width=x; public void paint(Graphics g) while(true) g.drawString(“Hello, Java!“,x,y); x-=10; if(x0) x=width; ,39,2.6 动态效果-线程的应用,实现一个线程,让Applet类去实现Runable接口,创建一个线程类,改写方法start,在其中产生一个新的线程来工作,改写stop方法,在其中编写结束线程的程序代码,引入新的方法,将分给线程的工作写到run中,40,2.6 动态效果-线程的应用,第一步:实现Runable接口 public class xc e

24、xtends java.applet.Applet implements Runnable Thread smallthread=null; Thread是一个类,只有是它的实例才能具有线程的功能 主函数中要定义一个线程变量,41,2.6 动态效果-线程的应用,第二步:改写方法start public void start() if(smallthread = null) smallthread= new Thread(this); smallthread.start(); /从现在开始程序由两个线程在执行 第三步:改写stop方法 public void stop() smallthread

25、.stop(); /停止线程 smallthread = null; /释放线程对象,42,2.6 动态效果-线程的应用,第四步:新的方法run 将让线程要做的事放run中 public void run() while (true) repaint(); try Thread.sleep(1000); catch(InterruptedException e) ,43,2.6 动态效果-线程的应用,import java.applet.*; import java.awt.Graphics; public class MovingCharacter extends Applet implem

26、ents 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) ,44,2.6 动态效果-线程的应用,.,public void paint(Graphics g) g.drawString(“Hello, Java!“,x,y); x-

27、=10; if(x0) x=200; ,public void stop() my_thread.stop(); ,45,2.6 动态效果-线程的应用,跳动的小球,up=false; x=x-10; if(xheight) up=false; g.setColor(Color.red); g.fillOval(x,y,30,30);,46,2.6 动态效果-线程的应用,例:起始页上的小时钟 一个必须用到的类-Date类,给出系统时间 Date NowTime=new Date(); NowTime.getHours(), NowTime.getMinutes() 自己需要写什么样的类? Clo

28、ck-把数字时间成图形表示,(Hour*60*60+minute*60+second)/43200*2.0*PI,(minute*60+second)/3600*2.0*PI,second/60*2.0*PI,47,2.6 动态效果-线程的应用,48,2.6 动态效果-线程的应用,class Clock int hours,minutes,second,radius; Clock(int hrs,int min,int sec) hours=hrs%12; minutes=min; second=sec; void show(Graphics g, int x, int y,int rediu

29、s) 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);,49,2.6 动态效果-线程的应用,theta=(double)(hours*60*60+minutes*60+second)/ 43200.0*2.0*Math.PI; drawNiddle(g,Color.blue, x, y, hrs_len, theta); theta=(double)(mi

30、nutes*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); ,50,2.6 动态效果-线程的应用,private void drawNiddle(Graphics g, Color c, int x, int y, int len, double theta) g.setColor(c); g.drawLine(x,y

31、,(int)(x+len*Math.sin(theta), (int)(y-len*Math.cos(theta); ,51,2.6 动态效果-线程的应用,import java.awt.*;import java.util.Date; public class ClockDemo extends java.applet.Applet public void paint() Date timeNow = new Date(); Clock myClock = new Clock(timeNow.getHours(), timeNow.getMinutes(), timeNow.getSecon

32、ds(); myClock.show(g,100,100,100); ,52,2.6 动态效果-线程的应用,生成时间对象,取时间 生成Clock对象,将时间传递给Clock对象,paint() ,主类,53,2.6 动态效果-线程的应用,主类,start(),stop(),run(),paint(),换算弧度,画图,clock类,clock(),初始化,Show(),drawNiddle(),启动新线程,停止线程,生成clock类实例,repaint(),54,2.6 动态效果-线程的应用,例: 在主页上显示 字符串并且颜色从左至右不断变化 让我们来想一想: 需要那些数据成员? String

33、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,0,255); Thread thread;,55,2.6 动态效果-线程的应用,run()中做什么? 反复调用repaint public void

34、 run() while(true) repaint(); tryThread.sleep(50); catch(InterruptedException e) ,56,2.6 动态效果-线程的应用,paint()中做什么? 输出两次字符串,第一次用一种颜色,第二次用另一种颜色(该颜色只作用于指定的区域 ) g.clipRect(x,y,width,height) public void paint(Graphics g) FontMetrics fntM=g.getFontMetrics(); int font_height=fntM.getHeight(); int base_line=s

35、ize().height/2+font_height/2;,You are Welcome to HIT,57,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,0,base_line); strPt=(strPt+1)%(size().width+100); ,58,2.6 动态效果-线程的应用,在Java中播

36、放动画 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),59,2.6 动态效果-线程的应用,import java.awt.*; public class nina extends java.applet.Applet implements Runnable Image frame

37、; 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“); ,60,2.6 动态效果-线程的应用,public void paint(Graphics g) g.drawImage(frameframe_i,0,0,this);,public void run() w

38、hile(true) repaint(); try Thread.sleep(100); catch(InterruptedException e) frame_i=(frame_i+1)%frame.length; ,61,2.7 播放声音,java支持au格式的声音 两个方法: void play(URL url) void play(URL url, String name) 例:play(getCodeBase(), “boing.au”); (注:它是一次性的) 如果想反复播放怎么办? 借用类AudioClip(loop(),play(),stop(),62,2.7 播放声音,例:A

39、udioClip 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.au“); public void start() my_sound.loop(); public void stop() if(my_sound!=nu

40、ll) my_sound.stop();,63,2.7 播放声音,图像加声音岂不是更有吸引力 1. 在init中既取图像也取声音片断 framei=getImage(getCodeBase(), “img000“+i+“.gif“); SoundClip=getAudioClip(getCodeBase(),“boing.au“); 2. 在init中加入 SoundClip.loop(); 3. 在stop中加入 if (SoundClip!=null) SoundClip.stop();,64,2.8 可通用的代码,同时包含main()方法和 init()方法 由于application本

41、身不是图形环境,因此需要在程序中加入图形环境,以便可以作为普通的application使用 import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.util.*;,65,2.9 小结,小应用程序是在浏览器中运行的,每个小应用程序中必须有一个主类,冠以public,并且继承自java.applet. 小应用程序包括生命周期的四个环节和paint() 根据程序要求,用户可以在主类中定义其它方法,或定义其它类. public class myapplet extends Applet ini

42、t() ;start() ; stop() ;destroy() ; paint(Graphics g) myclass1;class myclass2;,66,2.9 小结,applet 主类,init(),start(),paint(),stop(),destroy(),自定义方法,applet启动后第一个被执行,在此初始化,init()后被执行,程序主要代码写在此,start()后被执行,写与输出有关的代码,浏览器变换页面时执行,可以省略重写,浏览器关闭时执行,可以省略重写,不能自动被执行,可以由前三个方法调用.例如: start() mymethod(),Classes,mymetho

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

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

当前位置:首页 > 其他


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