第二章java小程序_第1页
第二章java小程序_第2页
第二章java小程序_第3页
第二章java小程序_第4页
第二章java小程序_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论