第二章java小程序_第1頁
第二章java小程序_第2頁
第二章java小程序_第3頁
第二章java小程序_第4頁
第二章java小程序_第5頁
已閱讀5頁,還剩63頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第2章Java小應用北京大學計算機系代亞非1第2章Java小應用2.1所有小應用程序的根源2.2小試身手2.3圖形操作2.4

URL類2.5載入現(xiàn)有圖像文件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方法的參數(shù)是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創(chuàng)建一個實例Date

timeNow=new

Date();類名Font創(chuàng)建一個實例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傳遞參數(shù)的兩個步驟在起始頁中要有<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圖形坐標系統(tǒng)任何與繪圖有關的操作第一個要用的是java.awt.Graphics類Graphics類的對象不是由new產(chǎn)生的,而是由系統(tǒng)或其他方式直接將生好的Graphics對象當作方法的參數(shù),再交給程序設計者去處理.例如: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圖形處理獲取更詳細的數(shù)據(jù)請查閱有關FontMetrics類的方法fontMetrics=getFontMetrics(font);FontMetrics中比較重要的方法有:

stringWidth,charWidth,getAscent,getDesgetLeading,

getHeigh242.3圖形處理顏色的調整Color對象的使用創(chuàng)造自己的顏色:Color

mycolor=new

Color(int

red,

int

blue,

int

grg.setColor(Color.yellow)g.setColor(mycolor);例:隨機產(chǎn)生顏色,并畫圓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)當創(chuàng)建URL時發(fā)生錯誤,系統(tǒng)會產(chǎn)生異常

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載入現(xiàn)有圖像文件Image類java支持gif和jpg兩種格式的圖像圖像文件的URL:URL

picurl=

new

URL(“/Applet/img1.g取一幅圖像構成圖像對象Image

img1

=

getImage(picurl);Image

img2

=getImage(getCodeBase(),

“img2.gi322.5載入現(xiàn)有圖像文件

顯示一幅圖像:

g.drawImage(img1,x,y,this);g.drawImage(img1,

x,

y,Color.red,

this);g.drawImage(image1,

x,

y,x2,y2,Color.red,

this規(guī)定尺寸

規(guī)定背景332.5載入現(xiàn)有圖像文件完整的過程不要忘記AWT包定義Image對象了嗎?指定圖像的URL了嗎?把圖像取出來吧.還記得畫圖像用什么方法和命令嗎?在類中在init0中在paint0中342.5載入現(xiàn)有圖像文件

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動態(tài)效果線程的應用2.4動態(tài)效果線程的應用什么是線程?線程是執(zhí)行中的程序中的單個順序控制流.Java支持多線程開始顯示進度引出最后結果數(shù)學運算線程1線程2362.6動態(tài)效果線程的應用靜態(tài)的情況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

動態(tài)效果線程的應用動態(tài)的情況(不是多線程)

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動態(tài)效果線程的應用實現(xiàn)一個線程讓Applet類去實現(xiàn)Runable接口,創(chuàng)建一個線程類改寫方法start,在其中產(chǎn)生一個新的線程來工作改寫stop方法,在其中編寫結束線程的程序代碼引入新的方法,將分給線程的工作寫到run中392.6動態(tài)效果線程的應用第一步:實現(xiàn)Runable接口public

class

xc

extends

java.applet.Appletimplements

Runnable{

Thread

smallthread=null;…}Thread是一個類,只有是它的實例才能具有線程的功能主函數(shù)中要定義一個線程變量402.6動態(tài)效果線程的應用第二步:改寫方法startpublic

void

start(){

if(smallthread

==

null){

smallthread=

new

Thread(this);smallthread.start();//從現(xiàn)在開始程序由兩個線程在執(zhí)行}}第三步:改寫stop方法

public

void

stop(){

smallthread.stop();

//停止線程

smallthread=null;//釋放線程對象}412.6動態(tài)效果線程的應用第四步:新的方法run將讓線程要做的事放run中public

void

run(){

while

(true)

{repaint();try

{Thread.sleep(1000);}catch(InterruptedException

e){}}}42public

cl2a.ss6M動ov態(tài)i態(tà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動態(tài)效果線程的應用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動態(tài)效果線程的應用跳動的小球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動態(tài)效果線程的應用例:起始頁上的小時鐘一個必須用到的類Date類,給出系統(tǒng)時間Date

NowTime=new

Date();NowTime.getHours(),NowTime.getMinutes()自己需要寫什么樣的類?Clock把數(shù)字時間成圖形表示(Hour*60*60+minute*60+second)/43200*2.0*PI(minute*60+second)/3600*2.0*PIsecond/60*2.0*PI462.6動態(tài)效果線程的應用換算弧度畫圖主類取時間

paint()

{}clock類clock(){}初始化Show(){}drawNiddle(){}47class

Cl2o.c6k

動態(tài)效果線程的應用{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)態(tài)(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動態(tài)效果線程的應用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)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動態(tài)效果線程的應用生成時間對象,取時間生成Clock對象,將時間傳遞給Clock對象paint()

{}主類換算弧度畫圖clock類clock(){}初始化Show(){}drawNiddle(){522.6動態(tài)效果線程的應用主類start()stop()run()paint()換算弧度畫圖clock類clock(){}初始化Show(){}drawNiddle(){}啟動新線程停止線程生成clock類實例repaint()532.6動態(tài)效果線程的應用例:在主頁上顯示字符串并且顏色從左至右不斷變化讓我們來想一想:需要那些數(shù)據(jù)成員?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動態(tài)效果線程的應用run()中做什么?反復調用repaintpublic

void

run(){while(true){

repaint();try{Thread.sleep(50);}catch(InterruptedException

e)

{}}}552.6動態(tài)效果線程的應用paint()中做什么?輸出兩次字符串,第一次用一種顏色,第二次用另一種顏色(該顏色只作用于指定的區(qū)域)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動態(tài)效果線程的應用

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動態(tài)效果線程的應用在Java中播放動畫1.需要多張圖片2調用圖片的方法?getImage,3.將多幅圖像存入圖像對象數(shù)組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動態(tài)效果線程的應用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動態(tài)效果線程的應用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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論