北大計算機系培訓講義2小程序_第1頁
北大計算機系培訓講義2小程序_第2頁
北大計算機系培訓講義2小程序_第3頁
北大計算機系培訓講義2小程序_第4頁
北大計算機系培訓講義2小程序_第5頁
已閱讀5頁,還剩63頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、1第第2章章 Java小應用小應用北京大學計算機系北京大學計算機系代亞非代亞非2第第2章章 Java小應用小應用 2.1 所有小應用程序的根源所有小應用程序的根源 2.2 小試身手小試身手 2.3 圖形操作圖形操作 2.4 URL類類 2.5 載入現有圖像文件載入現有圖像文件 2.6 動畫效果動畫效果 2.7 播放聲音播放聲音 2.8 小小 結結32.1 所有小應用程序的根源所有小應用程序的根源 2.1.1 小應用的特點小應用的特點 回憶一下小應用程序的書寫格式回憶一下小應用程序的書寫格式 import java.applet.*; public class MyApplet extends

2、Applet ; applet都繼承自都繼承自java.applet.Applet類類,由由Sun公公司事先定義好了司事先定義好了. 每個小應用都有一個主程序類每個小應用都有一個主程序類, 之前必須加上之前必須加上public.42.1 所有小應用程序的根源所有小應用程序的根源 1. Browser loads URL2. Browser loads HTML documentApplet class3. Browser loads applet classesLocation: Loading.4. Browser run applet52.1 所有小應用程序的根源所有小應用程序的根源 Ap

3、plet的限制的限制appletBrowserSERVER本地程序本地程序fileSERVERlocalconnectionconnectionApplet被下載的被下載的與與applet無關的無關的本地方法本地方法62.1 所有小應用程序的根源所有小應用程序的根源 2.1.2 applet的生命周期的生命周期 paint()雖不在生命周期內雖不在生命周期內,但它的作用相當于但它的作用相當于applet的靈魂的靈魂Java.applet.Appletpublic void init()public void destroy()public void start()public void sto

4、p()public void paint(Graphics g)72.1 所有小應用程序的根源所有小應用程序的根源 一個一個applet的可視周期的可視周期initstartstopdestroy離開離開web頁面頁面重新裝入或改變頁面重新裝入或改變頁面大小或返回大小或返回Web頁面頁面82.1 所有小應用程序的根源所有小應用程序的根源 有關有關paint()方法方法 Applet本身是一個容器本身是一個容器,因此任何輸出都必須因此任何輸出都必須用圖形方法用圖形方法paint() 當小應用首次被裝載,以及每次窗口放大、當小應用首次被裝載,以及每次窗口放大、縮小、刷新時都要調用縮小、刷新時都要調

5、用paint方法方法 paint()是由瀏覽器調用的是由瀏覽器調用的, 而不是由程序調用,而不是由程序調用,當程序希望調用當程序希望調用paint方法時,用方法時,用repaint命令命令 paint方法的參數是方法的參數是Graphics類的對象類的對象 g,它,它在在java.awt.Graphics內內 paint(Graphicd g)。92.1 所有小應用程序的根源所有小應用程序的根源AWT thread(waiting)update()() clear arae call paint()()paint()()repaint()Exposure102.2 小試身手小試身手 2.2.1

6、 起始頁上的時間和日期起始頁上的時間和日期 介紹兩個類介紹兩個類: 1. 類名類名:Date 創建一個實例創建一個實例 Date timeNow=new Date(); 2. 類名類名Font 創建一個實例創建一個實例 Font msgFont=new Font(“TimesRoman”,Font.ITALIC,30);0Mon Dec 07 14:23:50 GMT+08:00 1998112.2 小試身手小試身手 看下面的例子看下面的例子,想一想生命周期的四個方法哪去了想一想生命周期的四個方法哪去了?import java.awt.*; import java.util.Date;publ

7、ic class showDate extends java.applet.Applet Date timeNow=new Date(); Font msgFont=new Font(“TimesRoman”,Font.ITALIC,30); public void paint(Graphics g) g.setFont(msgFont); g.setColor(Color.blue); g.darwString(timeNow.toString(),5,50); 122.2 小試身手小試身手2.2.2 在起始頁中加入在起始頁中加入applethtml中有關的代碼中有關的代碼 CODEBASE

8、的作用的作用 當當class文件與起始頁文件不在同一個目錄下文件與起始頁文件不在同一個目錄下時時,使用使用CODEBASE說明說明 CODEBASE=“myjavaclass”132.2 小試身手小試身手 CODEBASE=“myjavaclass”C:publicIndex.htmlmyjavaclassshowdatejavacodeC:publicIndex.htmlmyjavaclassshowdatejavacode142.2 小試身手小試身手 ALIGN,HSPACE,VSPACEJava applet其它文字其它文字其它文字其它文字vspacehspacevspace=100 h

9、space=100152.2 小試身手小試身手 向向applet傳遞參數的兩個步驟傳遞參數的兩個步驟 1. 在起始頁中要有在起始頁中要有標簽標簽 2. 在在applet中要有中要有getParameter方法方法 在起始頁中有在起始頁中有: 在在applet中有中有: string title=getParameter(rem); 在顯示時間的命令中加入在顯示時間的命令中加入title: g.drawString(title+timeNow.toString(),5,50);162.2 小試身手小試身手import java.awt.*; import java.util.Date;publi

10、c class showDate extends java.applet.Applet Date timeNow=new Date(); String title; Font msgFont=new Font(“TimesRoman”,Font.ITALIC,30);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+ t

11、imeNow.toString(),5,50);172.2 小試身手小試身手 例例:利用一個可以顯示運行字符串的類利用一個可以顯示運行字符串的類,顯示自顯示自己的字符串己的字符串 (htmlpara.html) 182.2 小試身手小試身手public void init() String paramete;parameter=getParameter(MESSAGE);if (parameter!=null)message=parameter; parameter=getParameter(FONT);if (parameter!=null)font_to_use=parameter; pa

12、rameter=getParameter(POINT_SIZE); if (parameter!=null)point_size=Integer.parseInt(parameter);192.3 圖形處理圖形處理2.3.1圖形坐標系統圖形坐標系統任何與繪圖有關的操作任何與繪圖有關的操作第一個要用的是第一個要用的是java.awt.Graphics類類Graphics類的對象不是類的對象不是由由new產生的產生的,而是由系而是由系統或其他方式直接將生好的統或其他方式直接將生好的Graphics對象當作對象當作方法的參數方法的參數,再交給程序設計者去處理再交給程序設計者去處理.例如例如: pai

13、nt(Graphics g)xy0202.3 圖形處理圖形處理 Graphics的方法的方法 paint(Graphics g) g.clearRect(); g.copyArea(); g.drawAre() ; g.drawLine(); g.drawOval();g.drawRect(); g.drawPolygon(); g.fillArc(); g.fillOval(); g.fillPolygen(); g.fillRect(); g.getColor(); g.getFont() g.setFont(); g.setColor(); g.getFontMetrics() g.fi

14、llRoundRect() 212.3 圖形處理圖形處理2.3.2 字型和顏色的設置字型和顏色的設置 字型設置的方法字型設置的方法 Font font=new Font(“TimesRoman”,Font.ITALIC,24); g.setFont(font);在小應用程序中顯示輸出的方法在小應用程序中顯示輸出的方法 g.drawString(String, int x, int y); g.drawChars(char data, int offset, int length, int x, int y);222.3 圖形處理圖形處理g.drawBytes(byte data,

15、int offset, int length, int x, int y);例例:g.drawString(“This is a test”,5,10);獲取字體的屬性獲取字體的屬性 Font font=g.getFont();Font類中常用的方法類中常用的方法 GetFamily() getName() getSize() getStyle() isItalic() isPlain()isBold()toString()232.3 圖形處理圖形處理import java.awt.Graphics; import java.awt.Font;public class drawtext ext

16、ends 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 demo242.3 圖形處理圖形處理獲取更詳細的數據獲取更詳細的數據 請查閱有關請查閱有關FontMetrics類的方法類的方法 fontMetrics=getFontMetrics(font);FontMetrics中比較重要的方法有中比較重要的方法有: stringWidth, charWidt

17、h, getAscent, getDescent, getLeading, getHeigh252.3 圖形處理圖形處理 顏色的調整顏色的調整Color對象的使用對象的使用 創造自己的顏色創造自己的顏色: Color mycolor=new Color(int red, int blue, int green);g.setColor(Color.yellow)g.setColor(mycolor);例例:隨機產生顏色隨機產生顏色,并畫圓并畫圓262.3 圖形處理圖形處理import java.awt.Graphics; import java.awt.Color;public c

18、lass drawcircle extends java.applet.Applet public void paint(Graphics g) int red,green,blue,x;for (x=0;x370;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);27

19、2.4 URL類類2.4.2 構造構造URL類類 (全名全名java.lang.URL)絕對絕對URL的構造方法的構造方法: URL(String spec) 例例: URL url=new URL ( ”)相對相對URL的構造方法的構造方法: 某絕對地址某絕對地址: 在該目錄下有兩個文件在該目錄下有兩個文件 mywork.html myfamily.html282.4 URL類類 URL base=new URL(“ ”); URL url1=new (base, “mywork.html”); URL url2=new (base, “mywork.html”);其他其他URL的構造方法的

20、構造方法: URL url=new URL (“http”, “ ”,“/dyf/test.html”);292.4 URL類類2.4.3 獲取小應用程序獲取小應用程序HTML頁面的頁面的URL和小和小應用程序本身的應用程序本身的URLURL html=getDocumentBase();System.out.print(html);URL codebase=getCodeBase();System.out.print(codebase);瀏覽器瀏覽器服務器服務器htmlappletweb page302.4 URL類類 2.4.4 URL異常異常(MalformedURLException)

21、 當創建當創建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()312.4 URL類類 構造構造URL的實例的實例import .URL;import .MalformedURLException;public

22、 class Test URL url1,url2,url3; void test() try url1= new URL(“file:/D:/image/example.gif”); url2= new URL(“http:/ /cv/”); url1= new URL(url2, “hit.gif”); catch (MalformedURLException e); /處理例外處理例外 322.5 載入現有圖像文件載入現有圖像文件Image類類java支持支持gif和和jpg兩種格式的圖像兩種格式的圖像圖像文件的圖像文件的URL: URL picurl= new URL (“ ”);取一

23、幅圖像構成圖像對象取一幅圖像構成圖像對象 Image img1 = getImage(picurl); Image img2 = getImage(getCodeBase(), “img2.gif”);332.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);規定背景規定背景規定尺寸規定尺寸342.5 載入現有圖像文件載入現有圖像文件 完整的

24、過程完整的過程不要忘記不要忘記AWTAWT包包定義定義ImageImage對象了嗎對象了嗎? ?指定圖像的指定圖像的URLURL了嗎了嗎? ?把圖像取出來吧把圖像取出來吧. .還記得畫圖像用什么方法和命令嗎還記得畫圖像用什么方法和命令嗎? ?在類中在類中在在init0中中在在paint0中中352.5 載入現有圖像文件載入現有圖像文件import java.applet.*;import java.awt.*;public class image extends Applet Image img; public void init() img=getImage(getCodeBase(),im

25、g0001.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);362.6 動態效果動態效果-線程的應用線程的應用2.4 動態效果動態效果-線程的應用線程的應用什么是線程什么是線程? 線程是執行中的程序中的單個順序控制流線程是執行中的程序中的單個順序控制流. Java支持多線程支持多線程

26、開始開始顯示進度顯示進度引出最后結果引出最后結果數學運算數學運算線程線程1線程線程2372.6 動態效果動態效果-線程的應用線程的應用 靜態的情況靜態的情況 import java.applet.*; import java.awt.Graphics; public class maguee extends Applet public void paint(Graphics g)g.drawString(Hello, Java!,0,0); 382.6 動態效果動態效果-線程的應用線程的應用 動態的情況動態的情況(不是多線程不是多線程) public void init() x=size().

27、width; y=size().height/2;width=x; public void paint(Graphics g) while(true) g.drawString(Hello, Java!,x,y);x-=10;if(x0)x=width; 392.6 動態效果動態效果-線程的應用線程的應用 實現一個線程實現一個線程讓讓AppletApplet類去實現類去實現RunableRunable接口接口, ,創建一個線程類創建一個線程類改寫方法改寫方法start,start,在其中產生一個新的線程來工作在其中產生一個新的線程來工作改寫改寫stopstop方法方法, ,在其中編寫結束線程的

28、程序代碼在其中編寫結束線程的程序代碼引入新的方法引入新的方法, ,將分給線程的工作寫到將分給線程的工作寫到runrun中中402.6 動態效果動態效果-線程的應用線程的應用第一步:實現第一步:實現Runable接口接口public class xc extends java.applet.Applet implements Runnable Thread smallthread=null; Thread是一個類是一個類,只有是它的實例才能具有線程只有是它的實例才能具有線程的功能的功能主函數中要定義一個線程變量主函數中要定義一個線程變量412.6 動態效果動態效果-線程的應用線程的應用第二步:改

29、寫方法第二步:改寫方法startpublic void start()() if(smallthread = null) smallthread= new Thread(this);); smallthread.start(); /從現在開始程序由兩個線程在執行從現在開始程序由兩個線程在執行 第三步:改寫第三步:改寫stop方法方法public void stop()() smallthread.stop(); /停止線程停止線程 smallthread = null; /釋放線程對象釋放線程對象422.6 動態效果動態效果-線程的應用線程的應用第四步第四步:新的方法新的方法run將讓線程要做

30、的事放將讓線程要做的事放run中中public void run() while (true) repaint(); try Thread.sleep(1000); catch(InterruptedException e) 432.6 動態效果動態效果-線程的應用線程的應用import java.applet.*; import java.awt.Graphics;public class MovingCharacter extends Applet implements Runnable int x=200; Thread my_thread=null; /- public void st

31、art() my_thread=new Thread(this); my_thread.start(); public void run() while(true) repaint();try Thread.sleep(100); catch(InterruptedException e) 442.6 動態效果動態效果-線程的應用線程的應用 .public void paint(Graphics g) g.drawString(Hello, Java!,x,y); x-=10; if(x0)x=200;public void stop() my_thread.stop(); 452.6 動態效

32、果動態效果-線程的應用線程的應用 跳動的小球跳動的小球up=false; x=x-10; if(x0) x=width;if (up) y=y+10;else y=y-10;if (yheight) up=false;g.setColor(Color.red);g.fillOval(x,y,30,30);462.6 動態效果動態效果-線程的應用線程的應用例例:起始頁上的小時鐘起始頁上的小時鐘一個必須用到的類一個必須用到的類-Date類類,給出系統時間給出系統時間Date NowTime=new Date();NowTime.getHours(), NowTime.getMinutes()自己需

33、要寫什么樣的類自己需要寫什么樣的類? Clock-把數字時間成圖形表示把數字時間成圖形表示(Hour*60*60+minute*60+second)/43200*2.0*PI(minute*60+second)/3600*2.0*PIsecond/60*2.0*PI472.6 動態效果動態效果-線程的應用線程的應用取時間取時間paint() 主類主類換算弧度換算弧度畫圖畫圖clock類類clock()初始化初始化Show()drawNiddle()482.6 動態效果動態效果-線程的應用線程的應用class Clockint hours,minutes,second,radius; Clock

34、(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); 492.6 動態效果動態效果-線程的應用線程的應用 theta=(double)(h

35、ours*60*60+minutes*60+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*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);502.6 動態效果動態效果

36、-線程的應用線程的應用private void drawNiddle(Graphics g, Color c, int x, int y, int len, double theta) g.setColor(c);g.drawLine(x,y,(int)(x+len*Math.sin(theta), (int)(y-len*Math.cos(theta); 512.6 動態效果動態效果-線程的應用線程的應用import java.awt.*;import java.util.Date;public class ClockDemo extends java.applet.Applet publi

37、c void paint() Date timeNow = new Date();Clock myClock = new Clock(timeNow.getHours(), timeNow.getMinutes(), timeNow.getSeconds();myClock.show(g,100,100,100);522.6 動態效果動態效果-線程的應用線程的應用生成時間對象,取時間生成時間對象,取時間生成生成Clock對象,將時間傳對象,將時間傳遞給遞給Clock對象對象paint() 主類主類換算弧度換算弧度畫圖畫圖clock類類clock()初始化初始化Show()drawNiddle(

38、)532.6 動態效果動態效果-線程的應用線程的應用主類主類start()stop()run()paint()換算弧度換算弧度畫圖畫圖clock類類clock()初始化初始化Show()drawNiddle()啟動新線程啟動新線程停止線程停止線程生成生成clock類實例類實例repaint()542.6 動態效果動態效果-線程的應用線程的應用例例: 在主頁上顯示在主頁上顯示 字符串并且顏色從左至右不斷變化字符串并且顏色從左至右不斷變化讓我們來想一想讓我們來想一想: 需要那些數據成員需要那些數據成員?String msg, Font fnt, Color clr, spot_clr; Threa

39、d 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;552.6 動態效果動態效果-線程的應用線程的應用run()中做什么中做什么? 反復調用反復調用repaintpublic void run() while(true) repaint();

40、 tryThread.sleep(50); catch(InterruptedException e) 562.6 動態效果動態效果-線程的應用線程的應用paint()中做什么中做什么? 輸出兩次字符串輸出兩次字符串,第一次用一種顏色第一次用一種顏色,第二次用另一種顏第二次用另一種顏色色(該顏色只作用于指定的區域該顏色只作用于指定的區域 ) g.clipRect(x,y,width,height) public void paint(Graphics g) FontMetrics fntM=g.getFontMetrics(); int font_height=fntM.getHeight()

41、; int base_line=size().height/2+font_height/2;You are Welcome to HIT572.6 動態效果動態效果-線程的應用線程的應用 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);582.6

42、 動態效果動態效果-線程的應用線程的應用在在Java中播放動畫中播放動畫1.需要多張圖片需要多張圖片2 調用圖片的方法調用圖片的方法? getImage, 3.將多幅圖像存入圖像對象數組將多幅圖像存入圖像對象數組 Image frame=new Image10; for (int i=0;iframe.length;i+) framei=getImage(getCodeBase(), “pic”+i+ “.gif”);4. 顯示圖像顯示圖像 drawImage(x,y,0,0,this),592.6 動態效果動態效果-線程的應用線程的應用import java.awt.*;public cla

43、ss nina extends java.applet.Applet implements RunnableImage frame; Thread threadNina; 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); 602.6 動態效果動態效果-線程的應用線程的應用public void paint(

44、Graphics g) g.drawImage(frameframe_i,0,0,this); public void run() while(true) repaint(); try Thread.sleep(100); catch(InterruptedException e) frame_i=(frame_i+1)%frame.length; 612.7 播放聲音播放聲音java支持支持au格式的聲音格式的聲音兩個方法兩個方法:void play(URL url)void play(URL url, String name)例例:play(getCodeBase(), “boing.au

45、”); (注注:它是一次性的它是一次性的)如果想反復播放怎么辦如果想反復播放怎么辦?借用類借用類AudioClip(loop(),play(),stop()622.7 播放聲音播放聲音例例: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();632.7 播放聲音播放聲音 圖像加聲音豈不是更有吸引力圖像加聲音豈不是更有吸引力 1. 在在init中既取圖像也取聲音片斷中既取圖像也取聲音片斷 framei=getImage(getCodeBase(), img000+i+.gif); SoundClip=getAudioClip(getCodeBase(),boing.au); 2. 在在init中加入中加入

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論