版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章Java小应用北京大学计算机系代亚非1第2章Java小应用2.1所有小应用程序的根源2.2小试身手2.3图形操作2.4
URL类2.5载入现有图像文件2.6动画效果2.7
播放声音2.8
小
结22.1所有小应用程序的根源2.1.1小应用的特点回忆一下小应用程序的书写格式
import
java.applet.*;public
class
MyApplet
extends
Applet{
;}
applet都继承自java.applet.Applet类,由S司事先定义好了.
每个小应用都有一个主程序类,之前必须加上
public.3http://so2m.eL1oc所c所at有io小n小n/f应il用e.h程tm1序l.
B的row根se源r
loads
URL<Html><Applet
code=
….></Applet>2.
Browser
loadsHTML
documentApplet
class3.
Browser
loadsapplet
classesLocation:
http://someLocation/file.html4.Browserrun
appletLoading...42.1所有小应用程序的根源Applet的限制appletBrowserSERVER本地程序filelocalApplet被下载的connectionSERVER
connection与applet无关的本地方法52.1所有小应用程序的根源2.1.2
applet的生命周期Java.applet.Appletpublic
void
init()
public
void
destroy(public
void
start()public
void
stop()public
void
paint(Graphics
g)
paint()虽不在生命周期内,但它的作用相当于
applet的灵魂62.1所有小应用程序的根源一个applet的可视周期initdestroystart离开web页面stop重新装入或改变页面大小或返回Web页面72.1所有小应用程序的根源有关paint()方法
Applet本身是一个容器,因此任何输出都必须用图形方法paint()
当小应用首次被装载,以及每次窗口放大、缩小、刷新时都要调用paint方法
paint()是由浏览器调用的,而不是由程序调当程序希望调用paint方法时,用repaint命令
paint方法的参数是Graphics类的对象g,它在java.awt.Graphics内paint(Graphicd
g){。。。}82.1所有小应用程序的根源AWTthread(waiting)update(){
clear
araecall
paint()paint()repaint()Exposure92.2小试身手2.2.1起始页上的时间和日期Mon
Dec
07
14:23:50
GMT+08:00
1998介绍两个类:类名:Date创建一个实例Date
timeNow=new
Date();类名Font创建一个实例Font
msgFont=newFont(“TimesRoman”,Font.ITALIC,30)102.2小试身手看下面的例子,想一想生命周期的四个方法哪去了?
import
java.awt.*;import
java.util.Date;public
class
showDate
extends
java.applet.Apple{
Date
timeNow=new
Date();Font
msgFont=newFont(“TimesRoman”,Font.ITALIC,30);public
void
paint(Graphics
g){
g.setFont(msgFont);g.setColor(Color.blue);g.darwString(timeNow.toString(),5,50);}112.2小试身手2.2.2在起始页中加入applethtml中有关的代码<APPLET
CODE=“showdate.class”width=600
height=80>
</APPLET>CODEBASE的作用当class文件与起始页文件不在同一个目录下时,使用CODEBASE说明<APPLET
CODE=“showdate.class”width=600
height=80>CODEBASE=“\myjava\class”</APPLET>122.2小试身手showdateC:C\:\publicpublicmymjyajvaavaclassclassIndex.html
showdateIndex.htmljavacodejavacode<APPLETCODE=“showdate.class”width=600
height=80><C/OADPEPBLAESTE>=“\myjava\class”</APPLET>132.2小试身手ALIGN,HSPACE,VSPACE其它文字Java
applet
hspacevspace其它文字<APPLETCODE=“showdate.class”
width=600
height=80>vspace=100
hspace=100</APPLET>142.2小试身手向applet传递参数的两个步骤在起始页中要有<PARAM>标签在applet中要有getParameter方法在起始页中有:<applet
code=showdate
width=600
heigt=80><param
name=rem
value=“时间是:”></applet>在applet中有:string
title=getParameter(rem);在显示时间的命令中加入title:g.drawString(title+timeNow.toString(),5152.2小试身手{title=getParameter(“rem”);import
java.awt.*;
import
java.util.Date;public
class
showDate
extends
java.applet.Apple{
Date
timeNow=new
Date();
String
title;Font
msgFont=newFont(“TimesRoman”,Font.ITALIC,30);public
void
paint(Graphics
g)public
void
init(){
g.setFont(msgFont);g.setColor(Color.blue);g.darwString(title+timeNow.toString(),5,50);
if
(title==null)title=“”;}}162.2小试身手
例:利用一个可以显示运行字符串的类,显示自己的字符串(htmlpara.html)<applet
code=htmlpara.class
width=300
heigh=200<param
name=MESSAGE
value=”this
is
a
test"><param
name=FONT
value="BOLD"><param
name=POINT_SIZE
value=20></applet>172.2小试身手public
void
init(){Stringparamete;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(paramet}182.3图形处理2.3.1图形坐标系统任何与绘图有关的操作第一个要用的是java.awt.Graphics类Graphics类的对象不是由new产生的,而是由系统或其他方式直接将生好的Graphics对象当作方法的参数,再交给程序设计者去处理.例如:paint(Graphics
g)xy0192.3图形处理Graphics的方法
paint(Graphics
g){
g.clearRect();g.drawLine();g.copyArea();
g.drawAg.drawOval();g.drawRecg.drawPolygon();
g.fillArc();
g.fillOg.fillPolygen();
g.fillRect();
g.getg.getFont()
g.setFont();
g.setColg.getFontMetrics()g.fillRoundRect()}202.3图形处理字型和颜色的设置字型设置的方法
Font
font=newFont(“TimesRoman”,Font.ITALIC,24);
g.setFont(font);
在小应用程序中显示输出的方法
g.drawString(String,int
x,int
y);g.drawChars(char
data[],int
offset,intint
x,
int
y)212.3图形处理g.drawBytes(byte
data[],int
offset,
int
leint
x,int
y);例:g.drawString(“This
is
a
test”,5,10);获取字体的属性Font
font=g.getFont();Font类中常用的方法GetFamily()
getName()
getSize()
getStyisItalic()
isPlain()
isBold()
toS222.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
demo232.3图形处理获取更详细的数据请查阅有关FontMetrics类的方法fontMetrics=getFontMetrics(font);FontMetrics中比较重要的方法有:
stringWidth,charWidth,getAscent,getDesgetLeading,
getHeigh242.3图形处理颜色的调整Color对象的使用创造自己的颜色:Color
mycolor=new
Color(int
red,
int
blue,
int
grg.setColor(Color.yellow)g.setColor(mycolor);例:随机产生颜色,并画圆252.3图形处理import
java.awt.Graphics;
import
java.awt.Color;public
class
drawcircle
extends
java.applet.Applpublic
void
paint(Graphics
g)
{int
red,green,blue,x;for
(x=0;x<370;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);
}}}262.4
URL类2.4.2构造URL类(全名java.lang.URL)
绝对URL的构造方法:
URL(String
spec)例:
URL
url=new
URL(/cv/index.h相对URL的构造方法:某绝对地址:/tes在该目录下有两个文件mywork.html
myfamily.html272.4
URL类URL
base=newURL(“”);URL
url1=new
(base,
“mywork.html”);URL
url2=new
(base,
“mywork.html”);
其他URL的构造方法:
URL
url=new
URL(“http”,“”,“/~dyf/test.html”)282.4
URL类2.4.3获取小应用程序HTML页面的URL和小应用程序本身的URLURL
html=getDocumentBase();System.out.print(html);URL
codebase=getCodeBase();System.out.print(codebase);浏览器服务器htmlappletweb
page292.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()302.4
URL类构造URL的实例import
.URL;import
.MalformedURLException;public
class
Test{
URL
url1,url2,url3;void
test(){
try
{
url1=
new
URL(“file:/D:/image/exampleurl2=
new
URL(“/cv/url1=
new
URL(url2,
“hit.gif”);}catch
(MalformedURLException
e);//处理例外}
}}312.5载入现有图像文件Image类java支持gif和jpg两种格式的图像图像文件的URL:URL
picurl=
new
URL(“/Applet/img1.g取一幅图像构成图像对象Image
img1
=
getImage(picurl);Image
img2
=getImage(getCodeBase(),
“img2.gi322.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规定尺寸
规定背景332.5载入现有图像文件完整的过程不要忘记AWT包定义Image对象了吗?指定图像的URL了吗?把图像取出来吧.还记得画图像用什么方法和命令吗?在类中在init0中在paint0中342.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+30,height+30);g.drawImage(img,57,57,width+20,height+20,this)352.6动态效果线程的应用2.4动态效果线程的应用什么是线程?线程是执行中的程序中的单个顺序控制流.Java支持多线程开始显示进度引出最后结果数学运算线程1线程2362.6动态效果线程的应用静态的情况import
java.applet.*;import
java.awt.Graphics;public
class
maguee
extends
Applet{
public
void
paint(Graphics
g){g.drawString("Hello,
Java!",0,0);}}372.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(x<0)
x=width;
}}382.6动态效果线程的应用实现一个线程让Applet类去实现Runable接口,创建一个线程类改写方法start,在其中产生一个新的线程来工作改写stop方法,在其中编写结束线程的程序代码引入新的方法,将分给线程的工作写到run中392.6动态效果线程的应用第一步:实现Runable接口public
class
xc
extends
java.applet.Appletimplements
Runnable{
Thread
smallthread=null;…}Thread是一个类,只有是它的实例才能具有线程的功能主函数中要定义一个线程变量402.6动态效果线程的应用第二步:改写方法startpublic
void
start(){
if(smallthread
==
null){
smallthread=
new
Thread(this);smallthread.start();//从现在开始程序由两个线程在执行}}第三步:改写stop方法
public
void
stop(){
smallthread.stop();
//停止线程
smallthread=null;//释放线程对象}412.6动态效果线程的应用第四步:新的方法run将让线程要做的事放run中public
void
run(){
while
(true)
{repaint();try
{Thread.sleep(1000);}catch(InterruptedException
e){}}}42public
cl2a.ss6M动ov态i态ing效Ch果ara-c-t-er线ex程te的nds应Ap用pletimplements
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){}}}import
java.applet.*;
import
java.awt.Graphics4;32.6动态效果线程的应用public
void
paint(Graphics
g){
g.drawString("Hello,
Java!",x,y);x-=10;if(x<0)
x=200;}.public
void
stop(){
my_thread.stop();
}442.6动态效果线程的应用跳动的小球up=false;x=x-10;
if(x<0)
x=width;if
(up)
y=y+10;else
y=y-10;if
(y<0)
up=true;if
(y>height)
up=false;g.setColor(Color.red);g.fillOval(x,y,30,30);4543200=3600*122.6动态效果线程的应用例:起始页上的小时钟一个必须用到的类Date类,给出系统时间Date
NowTime=new
Date();NowTime.getHours(),NowTime.getMinutes()自己需要写什么样的类?Clock把数字时间成图形表示(Hour*60*60+minute*60+second)/43200*2.0*PI(minute*60+second)/3600*2.0*PIsecond/60*2.0*PI462.6动态效果线程的应用换算弧度画图主类取时间
paint()
{}clock类clock(){}初始化Show(){}drawNiddle(){}47class
Cl2o.c6k
动态效果线程的应用{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
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);48theta=(d2o.u6bl动e)态(ho效ur果s*6-0-*-60线+m程inu的te应s*6用6用0+second)/43200.0*2.0*Math.PI;drawNiddle(g,Color.blue,
x,
y,
hrs_len,
theta);theta=(double)(minutes*60-second)/3600.0*2.0*MadrawNiddle(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);}492.6动态效果线程的应用private
void
drawNiddle(Graphics
g,Color
c,
int
x,
int
y,
int
len,
double
the{g.setColor(c);g.drawLine(x,y,(int)(x+len*Math.sin(theta)),(int)(y-len*Math.cos(theta)));
}}50import
2ja.v6a.动aw态t.*效;i果mpo-r-t-j线ava程a程.u的ti应l应l.D用ate;
public
class
ClockDemo
extends
java.applet.Apple{
public
void
paint(){
Date
timeNow
=
new
Date();Clock
myClock
=
newClock(timeNow.getHours(),timeNow.getMinutes(),timeNow.getSeconds());myClock.show(g,100,100,100);}}512.6动态效果线程的应用生成时间对象,取时间生成Clock对象,将时间传递给Clock对象paint()
{}主类换算弧度画图clock类clock(){}初始化Show(){}drawNiddle(){522.6动态效果线程的应用主类start()stop()run()paint()换算弧度画图clock类clock(){}初始化Show(){}drawNiddle(){}启动新线程停止线程生成clock类实例repaint()532.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,0,255);Thread
thread;}542.6动态效果线程的应用run()中做什么?反复调用repaintpublic
void
run(){while(true){
repaint();try{Thread.sleep(50);}catch(InterruptedException
e)
{}}}552.6动态效果线程的应用paint()中做什么?输出两次字符串,第一次用一种颜色,第二次用另一种颜色(该颜色只作用于指定的区域)You
are
Welcome
to
HITg.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;56g.clipRect(strPt-50,0,str_bk_size,size().height);左上角组破标,宽度和长度2.6动态效果线程的应用
g.setFont(fnt);g.setColor(clr);g.drawString(Msg,0,base_line);g.clipRect(strPt-50,0,str_bk_size,size().heigg.setColor(spot_clr);g.drawString(Msg,0,base_line);strPt=(strPt+1)%(size().width+100);}}572.6动态效果线程的应用在Java中播放动画1.需要多张图片2调用图片的方法?getImage,3.将多幅图像存入图像对象数组Image
frame[]=new
Image[10];for
(int
i=0;i<frame.length;i++)frame[i]=getImage(getCodeBase(),
“pic”+i+“.gif”);4.显示图像drawImage(x,y,0,0,this),582.6动态效果线程的应用import
java.awt.*;public
class
nina
extends
java.applet.Appletimplements
Runnable{Image
frame[];Thread
threadNina;
int
frame_i;
int
delay_time;public
void
init(){
frame=new
Image[10];threadNina=null;
frame_i=0;for
(int
i=0;i<frame.length;i++)frame[i]=getImage(getCodeBase(),
"pic"+i+
".gi}592.6动态效果线程的应用public
void
run(){
while(true){
repaint();try{
Thread.sleep(100);}catch(InterruptedException
e)
{}frame_i=(frame_i+1)%frame.length;}}public
void
paint(Graphics
g){
g.drawImage(frame[frame_i],0,0,this);}602.7播放声音java支持au格式的声音两个方法:void
play(URL
url)void
play(URL
url,
String
name)例:play(getCodeBase(),“boing.au”);(注:它是一次性的)如果想反复播放怎么办?借用类AudioClip(loop(),play(),stop())612.7播放声音例:AudioClip
bg_sound=getAudioClip(getCodeBase(),“boing.bg_sound.play();或:bg_sound.loop();import
java.applet.AudioClip;public
class
audioextends
java.applet.Applet{AudioClipsound=getAudioClip(getCodeBase(),"boing.au");public
void
start(){
my_sound.loop();
}public
void
stop(){{
if(my_sound!
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高三学期末个人总结
- 小学生爱国卫生月演讲稿(3篇)
- 明装取暖最佳方案范文(3篇)
- 关于幼儿园开学第一天活动教案(7篇)
- 高三下学期工作总结
- 22.3 相似三角形的性质 同步练习
- 四川省德阳市2024-2025学年高二上学期第1周周考英语试题(含答案)
- 山东省德州禹城市2024-2025学年六年级上学期期中考试语文试题
- 河北省2025届高三年级上学期11月阶段调研检测(二)语文试题(解析版)
- 第四章 牛顿运动定律 章末检测题(基础卷)(含答案)2024-2025学年高一上学期物理人教版(2019)必修第一册
- 《跨境电子商务客服与沟通》 课件 第3章 售前客服与沟通
- 产后会阴疼痛疾病演示课件
- 护理质量指标数据收集与分析
- 《中国古代礼制》课件
- 舞台美术设计基础
- 护士如何提高自己的专业知识和技能
- 2024年华润燃气集团招聘笔试参考题库含答案解析
- 2024年中国石油集团招聘笔试参考题库含答案解析
- 复发性流产查房
- 优先还款协议书
- 医学影像诊断学-教案
评论
0/150
提交评论