版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家具購銷合同案例
- 圖書出版合作協(xié)議書格式
- 汽車抵押借款合同協(xié)議書示例
- 個人合伙協(xié)議書格式
- 2024智能化工程維修合同
- 房地產(chǎn)抵押合同常見條款
- 教師臨時雇傭合同
- 2023年高考地理重點難點考點通練-環(huán)境安全與國家安全(原卷版)
- 工廠合作伙伴意向書
- 各類協(xié)議書的法律效力
- 西漢建立和“文景之治”課件 2024~2025學年統(tǒng)編版(2024)七年級歷史上冊
- 2024年碳排放管理員(高級工)職業(yè)鑒定考試題庫及答案
- 新編小學(部編版)語文六年級上冊全冊課時練(含答案)
- 滬科版(2024新版)八年級全冊物理第一學期期中學情評估測試卷(含答案)
- 浙江省寧波市余姚市蘭江中學2022-2023學年七年級上學期12月月考數(shù)學試題
- 2024年艾滋病防治知識競賽考試題庫200題(含答案)
- 2024至2030年中國高低壓開關柜行業(yè)市場全景分析及投資策略研究報告
- 《新時代公民道德建設實施綱要》、《新時代愛國主義教育實施綱要》知識競賽試題庫55題(含答案)
- 軟裝驗收合同范本
- 2024年國家開放大學電大《職業(yè)素質》形成性考核四
- 工廠安全培訓考試題(完美)
評論
0/150
提交評論