版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第第2章章 java小应用小应用北京大学计算机系北京大学计算机系代亚非代亚非 本资源由本资源由 寒秀草与巧克力寒秀草与巧克力 搜集与网络搜集与网络 请您在传播的时候将下载分数设为请您在传播的时候将下载分数设为0 真正体现真正体现资源共享资源共享的理念的理念 谢谢谢谢 更多更多0分资料去我的文库分资料去我的文库23第第2章章 java小应用小应用 2.1 所有小应用程序的根源所有小应用程序的根源 2.2 小试身手小试身手 2.3 图形操作图形操作 2.4 url类类 2.5 载入现有图像文件载入现有图像文件 2.6 动画效果动画效果 2.7 播放声音播放声音 2.8 小小 结结42.1 所有小
2、应用程序的根源所有小应用程序的根源 2.1.1 小应用的特点小应用的特点 回忆一下小应用程序的书写格式回忆一下小应用程序的书写格式 import java.applet.*; public class myapplet extends applet ; applet都继承自都继承自java.applet.applet类类,由由sun公公司事先定义好了司事先定义好了. 每个小应用都有一个主程序类每个小应用都有一个主程序类, 之前必须加上之前必须加上public.52.1 所有小应用程序的根源所有小应用程序的根源http:/somelocation/file.html1. browser load
3、s url2. browser loads html documentapplet class3. browser loads applet classeslocation:http:/somelocation/file.htmlloading.4. browser run applet62.1 所有小应用程序的根源所有小应用程序的根源 applet的限制的限制appletbrowserserver本地程序本地程序fileserverlocalconnectionconnectionapplet被下载的被下载的与与applet无关的无关的本地方法本地方法72.1 所有小应用程序的根源所有小应用
4、程序的根源 2.1.2 applet的生命周期的生命周期 paint()虽不在生命周期内虽不在生命周期内,但它的作用相当于但它的作用相当于applet的灵魂的灵魂java.applet.appletpublic void init()public void destroy()public void start()public void stop()public void paint(graphics g)82.1 所有小应用程序的根源所有小应用程序的根源 一个一个applet的可视周期的可视周期initstartstopdestroy离开离开web页面页面重新装入或改变页面重新装入或改变页面大
5、小或返回大小或返回web页面页面92.1 所有小应用程序的根源所有小应用程序的根源 有关有关paint()方法方法 applet本身是一个容器本身是一个容器,因此任何输出都必须因此任何输出都必须用图形方法用图形方法paint() 当小应用首次被装载,以及每次窗口放大、当小应用首次被装载,以及每次窗口放大、缩小、刷新时都要调用缩小、刷新时都要调用paint方法方法 paint()是由浏览器调用的是由浏览器调用的, 而不是由程序调用,而不是由程序调用,当程序希望调用当程序希望调用paint方法时,用方法时,用repaint命令命令 paint方法的参数是方法的参数是graphics类的对象类的对象
6、 g,它,它在在java.awt.graphics内内 paint(graphicd g)。102.1 所有小应用程序的根源所有小应用程序的根源awt thread(waiting)update()() clear arae call paint()()paint()()repaint()exposure112.2 小试身手小试身手 2.2.1 起始页上的时间和日期起始页上的时间和日期 介绍两个类介绍两个类:1. 类名类名:date 创建一个实例创建一个实例 date timenow=new date();2. 类名类名font 创建一个实例创建一个实例 font msgfont=new fo
7、nt(“timesroman”,font.italic,30);0mon dec 07 14:23:50 gmt+08:00 1998122.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
8、void paint(graphics g) g.setfont(msgfont); g.setcolor(color.blue); g.darwstring(timenow.tostring(),5,50); 132.2 小试身手小试身手2.2.2 在起始页中加入在起始页中加入applet html中有关的代码中有关的代码 codebase的作用的作用 当当class文件与起始页文件不在同一个目录下文件与起始页文件不在同一个目录下时时,使用使用codebase说明说明 codebase=“myjavaclass”142.2 小试身手小试身手 codebase=“myjavaclass”c:p
9、ublicindex.htmlmyjavaclassshowdatejavacodec:publicindex.htmlmyjavaclassshowdatejavacode152.2 小试身手小试身手 align,hspace,vspacejava applet其它文字其它文字其它文字其它文字vspacehspacevspace=100 hspace=100162.2 小试身手小试身手 向向applet传递参数的两个步骤传递参数的两个步骤 1. 在起始页中要有在起始页中要有标签标签 2. 在在applet中要有中要有getparameter方法方法在起始页中有在起始页中有:在在applet中
10、有中有:string title=getparameter(rem);在显示时间的命令中加入在显示时间的命令中加入title:g.drawstring(title+timenow.tostring(),5,50);172.2 小试身手小试身手import java.awt.*; import java.util.date;public class showdate extends java.applet.applet date timenow=new date(); string title; font msgfont=new font(“timesroman”,font.italic,30)
11、;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);182.2 小试身手小试身手 例例:利用一个可以显示运行字符串的类利用一个可以显示运行字符串的类,显示自显示自己的字符串己的字符串 (htmlpara.html)192.2 小试身手小试身手public void in
12、it() 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);202.3 图形处理图形处理2.3.1图形坐标系统图形坐标系统任何与绘图有关的操作
13、任何与绘图有关的操作第一个要用的是第一个要用的是java.awt.graphics类类graphics类的对象不是类的对象不是由由new产生的产生的,而是由系而是由系统或其他方式直接将生好的统或其他方式直接将生好的graphics对象当作对象当作方法的参数方法的参数,再交给程序设计者去处理再交给程序设计者去处理.例如例如: paint(graphics g)xy0212.3 图形处理图形处理 graphics的方法的方法paint(graphics g) g.clearrect(); g.copyarea(); g.draware() ; g.drawline(); g.drawoval();
14、g.drawrect(); g.drawpolygon(); g.fillarc(); g.filloval(); g.fillpolygen(); g.fillrect(); g.getcolor(); g.getfont() g.setfont(); g.setcolor(); g.getfontmetrics() g.fillroundrect()222.3 图形处理图形处理2.3.2 字型和颜色的设置字型和颜色的设置 字型设置的方法字型设置的方法 font font=new font(“timesroman”,font.italic,24); g.setfont(font
15、); 在小应用程序中显示输出的方法在小应用程序中显示输出的方法 g.drawstring(string, int x, int y); g.drawchars(char data, int offset, int length, int x, int y);232.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类中常用的方法类中常用的方法
16、getfamily() getname() getsize() getstyle() isitalic() isplain()isbold()tostring()242.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 d
17、emo”,5,10); font demo252.3 图形处理图形处理获取更详细的数据获取更详细的数据 请查阅有关请查阅有关fontmetrics类的方法类的方法 fontmetrics=getfontmetrics(font);fontmetrics中比较重要的方法有中比较重要的方法有: stringwidth, charwidth, getascent, getdescent, getleading, getheigh262.3 图形处理图形处理 颜色的调整颜色的调整 color对象的使用对象的使用 创造自己的颜色创造自己的颜色: color mycolor=new colo
18、r(int red, int blue, int green); g.setcolor(color.yellow) g.setcolor(mycolor); 例例:随机产生颜色随机产生颜色,并画圆并画圆272.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.
19、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);282.4 url类类2.4.2 构造构造url类类 (全名全名java.lang.url) 绝对绝对url的构造方法的构造方法: url(string spec) 例例: url url=new url (http:/ 相对相对url的构造方法的构造方法: 某
20、绝对地址某绝对地址:http:/ 在该目录下有两个文件在该目录下有两个文件 mywork.html myfamily.html292.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”);302.4 url类类2.4.3 获取小应用程序获取小应用程序html页面的页面的url和小和小应用程序本身的应用程序本
21、身的url url html=getdocumentbase(); system.out.print(html); url codebase=getcodebase(); system.out.print(codebase);浏览器浏览器服务器服务器htmlappletweb page312.4 url类类 2.4.4 url异常异常(malformedurlexception) 当创建当创建url时发生错误时发生错误,系统会产生异常系统会产生异常 try url url=new url(str); catch(malformedurlexception( e) displayerrormes
22、sage(); 2.4.5 url类的基本方法类的基本方法 string getprotocol(), string gethost(), ing getport(), string getfile(), string getref()322.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(“h
23、ttp:/ url1= new url(url2, “hit.gif”); catch (malformedurlexception e); /处理例外处理例外 332.5 载入现有图像文件载入现有图像文件image类类 java支持支持gif和和jpg两种格式的图像两种格式的图像 图像文件的图像文件的url: url picurl= new url (“/applet/img1.gif”); 取一幅图像构成图像对象取一幅图像构成图像对象 image img1 = getimage(picurl); image img2 = getimage(getcodeb
24、ase(), “img2.gif”);342.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);规定背景规定背景规定尺寸规定尺寸352.5 载入现有图像文件载入现有图像文件 完整的过程完整的过程不要忘记不要忘记awtawt包包定义定义imageimage对象了吗对象了吗? ?指定图像的指定图像的urlurl了吗了吗? ?把图像取出来吧把图像取
25、出来吧. .还记得画图像用什么方法和命令吗还记得画图像用什么方法和命令吗? ?在类中在类中在在init0中中在在paint0中中362.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
26、=img.getheight(this); g.drawrect(52,52,width+30,height+30);g.drawimage(img,57,57,width+20,height+20,this);372.6 动态效果动态效果-线程的应用线程的应用2.4 动态效果动态效果-线程的应用线程的应用 什么是线程什么是线程? 线程是执行中的程序中的单个顺序控制流线程是执行中的程序中的单个顺序控制流. java支持多线程支持多线程开始开始显示进度显示进度引出最后结果引出最后结果数学运算数学运算线程线程1线程线程2382.6 动态效果动态效果-线程的应用线程的应用 静态的情况静态的情况imp
27、ort java.applet.*; import java.awt.graphics;public class maguee extends applet public void paint(graphics g)g.drawstring(hello, java!,0,0);392.6 动态效果动态效果-线程的应用线程的应用 动态的情况动态的情况(不是多线程不是多线程)public void init() x=size().width; y=size().height/2;width=x;public void paint(graphics g) while(true) g.drawstri
28、ng(hello, java!,x,y);x-=10;if(x0)x=width; 402.6 动态效果动态效果-线程的应用线程的应用 实现一个线程实现一个线程让让appletapplet类去实现类去实现runablerunable接口接口, ,创建一个线程类创建一个线程类改写方法改写方法start,start,在其中产生一个新的线程来工作在其中产生一个新的线程来工作改写改写stopstop方法方法, ,在其中编写结束线程的程序代码在其中编写结束线程的程序代码引入新的方法引入新的方法, ,将分给线程的工作写到将分给线程的工作写到runrun中中412.6 动态效果动态效果-线程的应用线程的应用
29、第一步:实现第一步:实现runable接口接口public class xc extends java.applet.applet implements runnable thread smallthread=null; thread是一个类是一个类,只有是它的实例才能具有线程只有是它的实例才能具有线程的功能的功能主函数中要定义一个线程变量主函数中要定义一个线程变量422.6 动态效果动态效果-线程的应用线程的应用第二步:改写方法第二步:改写方法startpublic void start()() if(smallthread = null) smallthread= new thread(t
30、his);); smallthread.start(); /从现在开始程序由两个线程在执行从现在开始程序由两个线程在执行 第三步:改写第三步:改写stop方法方法public void stop()() smallthread.stop(); /停止线程停止线程 smallthread = null; /释放线程对象释放线程对象432.6 动态效果动态效果-线程的应用线程的应用第四步第四步:新的方法新的方法run将让线程要做的事放将让线程要做的事放run中中public void run() while (true) repaint(); try thread.sleep(1000); cat
31、ch(interruptedexception e) 442.6 动态效果动态效果-线程的应用线程的应用import java.applet.*; 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) rep
32、aint();try thread.sleep(100); catch(interruptedexception e) 452.6 动态效果动态效果-线程的应用线程的应用 .public void paint(graphics g) g.drawstring(hello, java!,x,y); x-=10; if(x0)x=200;public void stop() my_thread.stop(); 462.6 动态效果动态效果-线程的应用线程的应用 跳动的小球跳动的小球up=false; x=x-10; if(x0) x=width;if (up) y=y+10;else y=y-10
33、;if (yheight) up=false;g.setcolor(color.red);g.filloval(x,y,30,30);472.6 动态效果动态效果-线程的应用线程的应用例例:起始页上的小时钟起始页上的小时钟一个必须用到的类一个必须用到的类-date类类,给出系统时间给出系统时间date nowtime=new date();nowtime.gethours(), nowtime.getminutes()自己需要写什么样的类自己需要写什么样的类? clock-把数字时间成图形表示把数字时间成图形表示(hour*60*60+minute*60+second)/43200*2.0*p
34、i(minute*60+second)/3600*2.0*pisecond/60*2.0*pi482.6 动态效果动态效果-线程的应用线程的应用取时间取时间paint() 主类主类换算弧度换算弧度画图画图clock类类clock()初始化初始化show()drawniddle()492.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,
35、 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); 502.6 动态效果动态效果-线程的应用线程的应用 theta=(double)(hours*60*60+minutes*60+second)/ 43200.0*2.0*math.pi; drawniddle(g,color.blue, x, y, hrs
36、_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);512.6 动态效果动态效果-线程的应用线程的应用private void drawniddle(graphics g, color c, int x, int y, int len, double
37、theta) g.setcolor(c);g.drawline(x,y,(int)(x+len*math.sin(theta), (int)(y-len*math.cos(theta); 522.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(),
38、 timenow.getminutes(), timenow.getseconds();myclock.show(g,100,100,100);532.6 动态效果动态效果-线程的应用线程的应用生成时间对象,取时间生成时间对象,取时间生成生成clock对象,将时间传对象,将时间传递给递给clock对象对象paint() 主类主类换算弧度换算弧度画图画图clock类类clock()初始化初始化show()drawniddle()542.6 动态效果动态效果-线程的应用线程的应用主类主类start()stop()run()paint()换算弧度换算弧度画图画图clock类类clock()初始化初始
39、化show()drawniddle()启动新线程启动新线程停止线程停止线程生成生成clock类实例类实例repaint()552.6 动态效果动态效果-线程的应用线程的应用例例: 在主页上显示在主页上显示 字符串并且颜色从左至右不断变化字符串并且颜色从左至右不断变化让我们来想一想让我们来想一想: 需要那些数据成员需要那些数据成员?string msg, font fnt, color clr, spot_clr; thread thread;string msg=welcome to hit;需要哪些方法需要哪些方法? init, start, stop, run, paint;public
40、void init() fnt= new font(timeroman,font.plain,30); clr=new color(255,0,0); spot_clr=new color(0,0,255); thread thread;562.6 动态效果动态效果-线程的应用线程的应用run()中做什么中做什么? 反复调用反复调用repaintpublic void run() while(true) repaint(); trythread.sleep(50); catch(interruptedexception e) 572.6 动态效果动态效果-线程的应用线程的应用paint()中做
41、什么中做什么? 输出两次字符串输出两次字符串,第一次用一种颜色第一次用一种颜色,第二次用另一种颜第二次用另一种颜色色(该颜色只作用于指定的区域该颜色只作用于指定的区域 ) 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 hit582.6 动态效果动态效果-线程的
42、应用线程的应用 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);592.6 动态效果动态效果-线程的应用线程的应用在在java中播放动画中播放动画1.需要多张图片需要多张图片2 调用图片的方法调用图片的方法? getimage, 3.将多幅图像存
43、入图像对象数组将多幅图像存入图像对象数组 image frame=new image10; for (int i=0;iframe.length;i+) framei=getimage(getcodebase(), “pic”+i+ “.gif”);4. 显示图像显示图像 drawimage(x,y,0,0,this),602.6 动态效果动态效果-线程的应用线程的应用import java.awt.*;public class nina extends java.applet.applet implements runnableimage frame; thread threadnina;
44、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); 612.6 动态效果动态效果-线程的应用线程的应用public void paint(graphics g) g.drawimage(frameframe_i,0,0,this); public void run() while(true) repaint(
45、); try thread.sleep(100); catch(interruptedexception e) frame_i=(frame_i+1)%frame.length; 622.7 播放声音播放声音java支持支持au格式的声音格式的声音两个方法两个方法:void play(url url)void play(url url, string name)例例:play(getcodebase(), “boing.au”); (注注:它是一次性的它是一次性的)如果想反复播放怎么办如果想反复播放怎么办?借用类借用类audioclip(loop(),play(),stop()632.7 播放
46、声音播放声音例例:audioclip bg_sound= getaudioclip(getcodebase(), “boing.au”); bg_sound.play();或或: bg_sound.loop();import java.applet.audioclip;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();642.7 播放声音播放声音 图像加声音岂不是更有吸引力图像加声音岂不是更有吸引力1. 在在init中既取图像也取声音片断中既取图像也取声音片断 framei=getimage(getcodebase(), img000+i+.gif); soundclip=getaudioclip(getcodebase(),boin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 白细胞减少症患者的心理护理
- 护理创新与未来趋势
- 孕产妇并发症护理
- 崇义中学高三下学期第一次月考化学试题
- 江西开放大学2026年《秘书实务》形考作业1-5答案
- 2025年养老院门禁健康监测系统
- DB61∕T 2094.1-2025 天麻生产技术规范第1部分:总体要求
- 2026 年中职酒店管理(康乐服务)试题及答案
- 初中时区题目及答案
- 贵州遵义地区气候
- 宽容和感恩的培训
- 广东省汕头市金平区2024-2025学年七年级上学期期末考试数学试题
- 过敏性休克的抢救流程
- 常用机床电气检修课件 课题十一 T612 型卧式镗床电气检修
- 全国人大机关直属事业单位2026年度公开招聘工作人员考试模拟卷带答案解析
- 云肩非遗模板
- 头颈部肿瘤介绍
- 安全监理工作总程序
- 2026年中国宏观经济展望分析报告:底部夯实亮点引领未来方向
- 2025年新型健康饮品研发可行性研究报告及总结分析
- 竣工决算业务合同范本
评论
0/150
提交评论