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

上传人:sccc 文档编号:5372178 上传时间:2023-06-30 格式:PPT 页数:69 大小:512.51KB
返回 下载 相关 举报
java小程序1010北大计算机系java培训讲义.ppt_第1页
第1页 / 共69页
java小程序1010北大计算机系java培训讲义.ppt_第2页
第2页 / 共69页
java小程序1010北大计算机系java培训讲义.ppt_第3页
第3页 / 共69页
java小程序1010北大计算机系java培训讲义.ppt_第4页
第4页 / 共69页
java小程序1010北大计算机系java培训讲义.ppt_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《java小程序1010北大计算机系java培训讲义.ppt》由会员分享,可在线阅读,更多相关《java小程序1010北大计算机系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都继承自java.applet.

2、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 init(),public void

3、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()是由浏览器调用的,而不是由程序调用,当程序希望调用paint方法

4、时,用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 msgFont=new Font(“TimesRoman”,

5、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 paint(Graphics g)g.setFont(msgFont)

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

7、0,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 showDate extends java.applet.Applet Date timeNow=new Dat

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

9、.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(POINT_SIZE);if(parameter!=null)point_size=Integer.parseInt(parameter);,20,2.3 图形处理,2.

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

11、lygen();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.ITALIC,24);g.setFont(font);在小应用程序中显示输出的方法 g.drawString(String,int x,int y);g.drawChars(char data,int offset,int len

12、gth,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类中常用的方法 GetFamily()getName()getSize()getStyle()isItalic()isPlain()isBold()toString(),24,2.3 图形处理,import java.awt.Graphics;import java.awt.Fon

13、t;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,25,2.3 图形处理,获取更详细的数据 请查阅有关FontMetrics类的方法 fontMetrics=getFontMetrics(font);FontMetrics中比较重要的方法有:stringWidth,charWidth,ge

14、tAscent,getDescent,getLeading,getHeigh,26,2.3 图形处理,2.3.2.2 颜色的调整Color对象的使用 创造自己的颜色:Color mycolor=new Color(int red,int blue,int green);g.setColor(Color.yellow)g.setColor(mycolor);例:随机产生颜色,并画圆,27,2.3 图形处理,import java.awt.Graphics;import java.awt.Color;public class drawcircle extends java.applet.Apple

15、t 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 Color(red,green,blue);g.fillOval(x,0,30,30);,28,2.4 URL类,2.4.2 构造URL类(全名java.lang.URL)绝对URL的构造

16、方法:URL(String spec)例:URL url=new URL(http:/某绝对地址:http:/在该目录下有两个文件 mywork.html myfamily.html,29,2.4 URL类,URL base=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

17、URL html=getDocumentBase();System.out.print(html);URL codebase=getCodeBase();System.out.print(codebase);,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(

18、),ing getPort(),String getFile(),String getRef(),32,2.4 URL类,构造URL的实例,import.URL;import.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 载入

19、现有图像文件,Image类java支持gif和jpg两种格式的图像图像文件的URL:URL picurl=new URL(“http:/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

20、,Color.red,this);,规定背景,规定尺寸,35,2.5 载入现有图像文件,完整的过程,在类中,在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

21、.getHeight(this);g.drawRect(52,52,width+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

22、g)g.drawString(Hello,Java!,0,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方法

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

24、allthread.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.*;import java.a

25、wt.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 动态效果-线程的应用,.,public void pai

26、nt(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 NowTime=new Date();NowTime.getHours(),NowT

27、ime.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 Clockint hours,minutes,second,radius;Clock(int hrs,int min,int sec)hours=hrs%12;minutes=min;second=sec;void show(Graphics g

28、,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.0*Math.PI;drawNiddle(g,Color.blue,x,y,hrs_len,theta);theta=(dou

29、ble)(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,Color c,int x,int y,int len,double theta)g.setColor(c);g.drawLine(x,y,(int)(x+le

30、n*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 myClock=new Clock(timeNow.getHours(),timeNow.getMinutes(),timeNow.getSeconds();myClock.show(g,10

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

32、r;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;,56,2.6 动态效果-线程的应用,run()中做什么?反复调用repaintpublic void run()while(true)repaint();tryThread.sleep(50);catch(

33、InterruptedException e),57,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=size().height/2+font_height/2;,You are Welcome to HIT,58,2.6 动态效果-

34、线程的应用,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);,59,2.6 动态效果-线程的应用,在Java中播放动画1.需要多张图片2 调用图片的方法?getImage,3.将多幅图像存入图像对象数组 Image frame=new Image10;fo

35、r(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.*;public class nina extends java.applet.Applet implements RunnableImage frame;Thread threadNina;int frame_i;int delay_time;public void init()frame=new Image10;thr

36、eadNina=null;frame_i=0;for(int i=0;iframe.length;i+)framei=getImage(getCodeBase(),pic+i+.gif);,61,2.6 动态效果-线程的应用,public void 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;

37、,62,2.7 播放声音,java支持au格式的声音两个方法:void play(URL url)void play(URL url,String name)例:play(getCodeBase(),“boing.au”);(注:它是一次性的)如果想反复播放怎么办?借用类AudioClip(loop(),play(),stop(),63,2.7 播放声音,例:AudioClip bg_sound=getAudioClip(getCodeBase(),“boing.au”);bg_sound.play();或:bg_sound.loop();,import java.applet.AudioCl

38、ip;public class audio extends java.applet.AppletAudioClip sound=getAudioClip(getCodeBase(),boing.au);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

39、(getCodeBase(),boing.au);2.在init中加入 SoundClip.loop();3.在stop中加入 if(SoundClip!=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 小结,小应用程序

40、是在浏览器中运行的,每个小应用程序中必须有一个主类,冠以public,并且继承自java.applet.小应用程序包括生命周期的四个环节和paint()根据程序要求,用户可以在主类中定义其它方法,或定义其它类.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启动后第一个被执行,在此

41、初始化,init()后被执行,程序主要代码写在此,start()后被执行,写与输出有关的代码,浏览器变换页面时执行,可以省略重写,浏览器关闭时执行,可以省略重写,不能自动被执行,可以由前三个方法调用.例如: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 publi

42、c void init()Myclass test1=new Myclass();test1.method(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备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号