javaApplet應(yīng)用程序.ppt
《javaApplet應(yīng)用程序.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《javaApplet應(yīng)用程序.ppt(49頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
2020/4/25,1,Java面向?qū)ο蟪绦蛟O(shè)計(jì)ProgramminginJava,,2020/4/25,2,第8章Applet應(yīng)用程序,,,2020/4/25,3,本章總體綱要,小應(yīng)用程序小應(yīng)用程序HTML標(biāo)記符應(yīng)用程序和小應(yīng)用程序,,,2020/4/25,4,小應(yīng)用程序,什么是小應(yīng)用程序?類的層次結(jié)構(gòu)JApplet與Applet之間的不同點(diǎn)小應(yīng)用程序的生命周期小應(yīng)用程序的安全性,,2020/4/25,5,Applet應(yīng)用程序,又稱為小應(yīng)用程序,是嵌入到瀏覽器中的程序。Applet運(yùn)行于瀏覽器上,可以生成生動(dòng)的頁(yè)面,進(jìn)行友好的人機(jī)交互,同時(shí)還能處理圖像、聲音、動(dòng)畫等多媒體數(shù)據(jù)。Applet在Java的成長(zhǎng)過(guò)程中起到了不可估量的作用,到今天Applet依然是Java程序設(shè)計(jì)最吸引人的地方之一,,2020/4/25,6,8.1Applet基礎(chǔ),JavaApplet是用Java語(yǔ)言編寫的小應(yīng)用程序,這些程序是直接嵌入到頁(yè)面中,由支持Java的瀏覽器(IE或Nescape)解釋執(zhí)行,能夠產(chǎn)生特殊效果的程序。它可以大大提高Web頁(yè)面的交互能力和動(dòng)態(tài)執(zhí)行能力。包含Applet的網(wǎng)頁(yè)被稱為Java-powered頁(yè),可以稱其為Java支持的網(wǎng)頁(yè)。本節(jié)介紹Applet的基礎(chǔ)知識(shí),包括Applet與瀏覽器,查看、顯示Applet以及Applet生命周期。,,2020/4/25,7,8.1.1查看Applet,在查看Applet時(shí),可以使用支持Java的Web瀏覽器,或者JDK自帶的AppletViewer瀏覽。其中,在瀏覽器中顯示時(shí),Applet是由嵌入在Web頁(yè)面中的Applet相關(guān)HTML標(biāo)志來(lái)運(yùn)行。Aappletviewer提供了一個(gè)Java運(yùn)行環(huán)境,在其中可測(cè)試Applet。appletviewer讀取applet的HTML文件并在一個(gè)窗口中運(yùn)行它們。,,2020/4/25,8,,2020/4/25,9,8.1.2Applet與瀏覽器,雖然Applet可以在appletviewer中進(jìn)行查看,但隨著Java的發(fā)展,越來(lái)越多的網(wǎng)頁(yè)使用到Applet。雖然允許在Web瀏覽器中查看Applet。但是目前有多種瀏覽器版本,有的只支持Java1.0,有的只支持Java1.1,很少有支持Java2.0平臺(tái)的。而且,由于歷史原因,在頁(yè)面中嵌入Applet產(chǎn)生了幾種相互不兼容的方式,不同的瀏覽器、乃至同一個(gè)瀏覽器的不同版本,支持的標(biāo)簽都不完全相同。,,2020/4/25,10,8.1.3顯示Applet,Applet是一種特殊的Java程序,它不能獨(dú)立運(yùn)行。編譯器將Applet源程序編譯成Java字節(jié)碼(Byte-Code)后,在網(wǎng)頁(yè)中加載的是Java字節(jié)碼。在網(wǎng)絡(luò)上如果查看包含Java字節(jié)碼的網(wǎng)頁(yè),則Web服務(wù)器將編譯好的Java字節(jié)碼送至客戶端的瀏覽器中執(zhí)行,,2020/4/25,11,8.1.4Applet生命周期,Applet的生命周期相對(duì)于Application而言較為復(fù)雜。在其生命周期中涉及到Applet類的4個(gè)方法(也被JApplet類繼承):init()、start()、stop()和destroy()。Applet的生命周期中有4個(gè)狀態(tài):初始態(tài)、運(yùn)行態(tài)、停止態(tài)和消亡態(tài)。當(dāng)程序執(zhí)行完init()方法以后,Applet程序就進(jìn)入了初始態(tài);然后馬上執(zhí)行start()方法,Applet程序進(jìn)入運(yùn)行態(tài);當(dāng)Applet程序所在的瀏覽器圖標(biāo)化或者轉(zhuǎn)入其他頁(yè)面時(shí),該Applet程序馬上執(zhí)行stop()方法,Applet程序進(jìn)入停止態(tài);在停止態(tài)中,如果瀏覽器又重新裝載該Applet程序所在的頁(yè)面,或者瀏覽器從圖標(biāo)中復(fù)原,則Applet程序馬上調(diào)用start()方法,進(jìn)入運(yùn)行態(tài);當(dāng)然,在停止態(tài)時(shí),如果瀏覽器關(guān)閉,則Applet程序調(diào)用destroy()方法,進(jìn)入消亡態(tài)。,,2020/4/25,12,小應(yīng)用程序的生命周期,所有的小應(yīng)用程序具有如下的五個(gè)成員方法:publicvoidinit():在小應(yīng)用程序的生命周期中只會(huì)被調(diào)用一次,而且是在第一次加載小應(yīng)用程序時(shí)publicvoidstart():當(dāng)小應(yīng)用程序在啟動(dòng)或重新啟動(dòng)時(shí),會(huì)調(diào)用此方法publicvoidpaint():繪制小應(yīng)用程序的圖形界面publicvoidstop():當(dāng)小應(yīng)用程序被圖標(biāo)化或從當(dāng)前網(wǎng)頁(yè)轉(zhuǎn)到其它網(wǎng)頁(yè)時(shí),會(huì)調(diào)用此方法publicvoiddestroy():在小應(yīng)用程序的生命周期中只會(huì)被調(diào)用一次,而且是在(關(guān)閉網(wǎng)頁(yè)之前)卸載小應(yīng)用程序時(shí),,2020/4/25,13,小應(yīng)用程序的生命周期,,2020/4/25,14,8.2Applet類API,在Applet類中可以實(shí)現(xiàn)繪圖等功能,這些都與Applet所繼承的類有關(guān)。在這個(gè)繼承體系中,Applet的直接父類Panel是最簡(jiǎn)單的容器類,Panel的直接父類Container是一個(gè)一般的容器類,Container的直接父類Component是一個(gè)具有圖形表示能力的類,其對(duì)象可在屏幕上顯示,并可與用戶進(jìn)行交互。Applet類的主要方法有init()、start()、paint()、repaint()、stop()和destroy()。,,2020/4/25,15,8.2Applet類API,小應(yīng)用程序是可以嵌入到HTML(HypertextMarkupLanguage)文件中運(yùn)行的Java程序一般是java.applet.Applet(或javax.swing.JApplet)的子類通過(guò)appletviewer或HTML瀏覽器運(yùn)行,,2020/4/25,16,類的層次結(jié)構(gòu),java.lang.Object|+--java.awt.Component|+--java.awt.Container|+--java.awt.Panel|+--java.applet.Applet|+--javax.swing.JApplet,,2020/4/25,17,JApplet與Applet之間的不同點(diǎn),類JApplet是類java.applet.Applet的子類類JApplet與Swing組件配套默認(rèn)的布局方式不同JApplet?BorderLayout.Applet?FlowLayout.往容器JApplet中添加組件必須通過(guò)contentPane例如:給小應(yīng)用程序添加組件使用Applet,代碼如下:applet.add(child);使用Japplet,代碼如下:japplet.getContentPane().add(child);,,2020/4/25,18,8.3Applet的HTML標(biāo)記和屬性,由于Applet是需要嵌入在HTML中運(yùn)行的,所以Applet的調(diào)試和運(yùn)行都必須和HTML進(jìn)行協(xié)作。而HTML是超文本標(biāo)記語(yǔ)言,它通過(guò)各種各樣的標(biāo)記來(lái)顯示、編排超文本信息。在HTML中嵌入Applet同樣需要一組約定的特殊標(biāo)記,,2020/4/25,19,8.3Applet的HTML標(biāo)記和屬性,,,2020/4/25,20,8.3.1定位屬性,定位屬性只指定Applet位置的屬性,包含WIDTH、HEIGHT和ALIGN。WIDTH和HEIGHT:這2個(gè)屬性為必須的,它們定義Applet的大小,均以像素為單位,使用瀏覽器查看Applet時(shí),該數(shù)據(jù)為Applet的初始大小。ALIGN:該屬性定義了Applet的對(duì)齊方式。,,2020/4/25,21,8.3.2編碼屬性,編碼屬性用來(lái)告訴瀏覽器如何定位Applet的代碼,包含code、codebase和archive。1.Code:該屬性為必需的屬性。它告訴瀏覽器這個(gè)Applet需要用的類文件名,如Myclass.class。該屬性需要與下面提到的codebase進(jìn)行區(qū)別。code屬性是類名稱,但不是相對(duì)于codebase(代碼庫(kù))。如果沒(méi)有指定codebase,則該屬性指明的類名相當(dāng)對(duì)當(dāng)前頁(yè)面。如果類在包中,則該屬性應(yīng)標(biāo)明相對(duì)于頁(yè)面文件的位置,如chapter08/sample8_1/Sample8_1.class。也許該類中還調(diào)用了其他的類,Applet在運(yùn)行時(shí)會(huì)根據(jù)code屬性值自動(dòng)調(diào)用與該類相關(guān)的類。,,2020/4/25,22,8.3.2編碼屬性,2.codebase該屬性為可選屬性,用來(lái)指明類文件的URL。如果文件Myclass.class位于chapter08/sample8_1/中,而頁(yè)面文件位于與chapter08相同的目錄中,則可以使用下面的標(biāo)記:,,2020/4/25,23,標(biāo)記符Code和Codebase,標(biāo)記符CODE用來(lái)指定小應(yīng)用程序所對(duì)應(yīng)的“.class”文件標(biāo)記符CODEBASE用來(lái)指定URL(網(wǎng)絡(luò)資源定位器)標(biāo)明“.class”所在的位置/路徑示例1:示例2:,,2020/4/25,24,8.3.2編碼屬性,3.a(chǎn)rchive該屬性為可選屬性。標(biāo)明Java存檔文件、包、包含類文件和類相關(guān)的其他文件(即JAR文件)。JAR文件使用逗號(hào)隔開(kāi),例如:,,2020/4/25,25,JAR壓縮文檔和標(biāo)記符ARCHIVE,將小應(yīng)用程序所需要的所有圖像、聲音以及“.class”文件壓縮成一個(gè)JAR壓縮文檔一般可以大大減少加載小應(yīng)用程序的時(shí)間每個(gè)文件?加載?需要獨(dú)立的HTTP連接許多文件?許多次連接許多文件組成一個(gè)文件?一次連接數(shù)據(jù)被壓縮?減少數(shù)據(jù)本身的傳輸時(shí)間,,2020/4/25,26,示例:(ARCHIVE),javac*.javajar-cvfall.jar*.class,,AnappletExample,,命令,AppletExample.html,2020/4/25,27,8.3.2編碼屬性,4.object該屬性用來(lái)指定序列化的Applet對(duì)象文件的名字,顯示Applet時(shí)對(duì)象從文件中反序列化,該屬性非常特殊盡量不要使用該屬性。5.name就像每個(gè)人都有自己的名字一樣。每個(gè)Applet也有自己的名字,這個(gè)屬性指明Applet的名字。這樣同一頁(yè)面中的Applet或者JavaScript都可以調(diào)用該Applet,該屬性為可選屬性。,,2020/4/25,28,8.4創(chuàng)建Applet,使用Applet的HTML文件,由支持Java的網(wǎng)頁(yè)瀏覽器下載運(yùn)行。也可以通過(guò)Java開(kāi)發(fā)工具中的appletviewer來(lái)運(yùn)行。在編寫新的Apple程序時(shí),可以分為帶參數(shù)Applet和不帶參數(shù)Applet,即Applet程序是否向?yàn)g覽器傳遞參數(shù)。,,2020/4/25,29,8.4.1簡(jiǎn)單Applet,簡(jiǎn)單Applet即不向?yàn)g覽器傳遞參數(shù)的Applet。對(duì)于所有的Applet來(lái)說(shuō),其目標(biāo)是創(chuàng)建與用戶交互的界面,所以Applet需要?jiǎng)?chuàng)建GUI組件,完成圖像、動(dòng)畫輸入等任務(wù)。創(chuàng)建Applet一般包含如下的步驟。(1)引入需要的類。(2)定義Applet的主類,該類繼承Applet類。(3)重載Applet類中的方法。(4)其他方法。(5)將Applet類添加至HTML代碼中。,,2020/4/25,30,8.4.2向Applet傳遞參數(shù),如果Applet需要參數(shù),則編寫時(shí)比上一節(jié)的簡(jiǎn)單Applet稍微復(fù)雜一些。因?yàn)樵贘avaApplication中,都是通過(guò)命令行向main()方法傳遞參數(shù)。但是在Applet中是沒(méi)有main()方法的。但是在Applet中,可以在HTML中使用標(biāo)記定義參數(shù),格式如下所示。,,2020/4/25,31,給小應(yīng)用程序傳遞參數(shù),給小應(yīng)用程序傳遞參數(shù),在HTML文件中介于和之間給小應(yīng)用程序傳遞參數(shù),在程序代碼中publicStringgetParameter(Stringname)類java.applet.Applet的成員方法,,2020/4/25,32,示例:J_Applet.java,importjava.awt.*;importjavax.swing.*;publicclassJ_AppletextendsJApplet{publicvoidpaint(Graphicsg){Strings=getParameter("TestPara");g.drawString("Valueof\"TestPara\"is"+s+".",10,50);}//方法paint結(jié)束}//類J_Applet結(jié)束,,AnappletExample,,Valueof"TestPara"isTestValue.,,J_Applet.java,AppletExample.html,程序輸出,2020/4/25,33,8.5Applet與Application,在本章之前的Java程序,一般都具有一樣的特征:包含main()方法。當(dāng)類中包含main()方法時(shí),才可以運(yùn)行,這樣的程序稱之為應(yīng)用(Application)。應(yīng)用程序與本章中所談到的Applet程序是有一定區(qū)別的。應(yīng)用程序可以使用java命令運(yùn)行。而Applet需要嵌入到HTML頁(yè)面中,利用appletviewer命令在appletviewer中顯示。那么既然應(yīng)用程序和Applet程序都由Java語(yǔ)言編寫,那么能不能將兩者整合,使程序既是Applet程序,又是應(yīng)用程序呢?為了達(dá)到這樣的目的,首先看二者的區(qū)別在哪里。,,2020/4/25,34,8.5Applet與Application,可以編寫一個(gè)程序,它既是應(yīng)用程序,又是小應(yīng)用程序。單個(gè)“.class”文件既可以按應(yīng)用程序執(zhí)行,又可以按小應(yīng)用程序執(zhí)行,,2020/4/25,35,示例:J_List.java,//J_List.java;//同時(shí)是應(yīng)用程序與小應(yīng)用程序的圖像顯示例程importjava.awt.BorderLayout;importjava.awt.Container;importjava.awt.Image;importjava.io.File;importjavax.imageio.ImageIO;importjavax.swing.event.ListSelectionEvent;importjavax.swing.event.ListSelectionListener;importjavax.swing.Icon;importjavax.swing.ImageIcon;importjavax.swing.JApplet;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JList;publicclassJ_ListextendsJApplet{privateStringm_items[]={"snow.gif","flag.gif","rain.gif"};privateJListm_list=newJList(m_items);privateJLabelm_label=newJLabel();privateIconm_icons[]=newImageIcon[3];privateImagem_image[]=null;Containerm_container=null;,,2020/4/25,36,示例:J_List.java,publicvoidinit(){inti;if(m_image==null){m_image=newImage[3];for(i=0;i<3;i++)m_image[i]=getImage(getCodeBase(),m_items[i]);}//if結(jié)構(gòu)結(jié)束for(i=0;i<3;i++)m_icons[i]=newImageIcon(m_image[i]);if(m_container==null)m_container=getContentPane();m_container.setLayout(newBorderLayout());m_container.add(m_list,BorderLayout.WEST);m_list.setSelectedIndex(0);m_list.addListSelectionListener(newListSelectionListener(){publicvoidvalueChanged(ListSelectionEvente){ints=m_list.getAnchorSelectionIndex();m_label.setIcon(m_icons[s]);}//方法valueChanged結(jié)束}//實(shí)現(xiàn)接口ListSelectionListener的內(nèi)部類結(jié)束);//addListSelectionListener方法調(diào)用結(jié)束,,2020/4/25,37,示例:J_List.java,m_container.add(m_label,BorderLayout.EAST);m_label.setIcon(m_icons[0]);}//方法init結(jié)束publicstaticvoidmain(Stringargs[]){JFramef=newJFrame("應(yīng)用程序");J_Listapp=newJ_List();app.m_container=f.getContentPane();app.m_image=newImage[3];try{for(inti=0;i<3;i++)app.m_image[i]=ImageIO.read(newFile(app.m_items[i]));}catch(Exceptione){System.err.println("發(fā)生異常:"+e);e.printStackTrace();}//try-catch結(jié)構(gòu)結(jié)束app.init();f.setSize(250,110);f.setVisible(true);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}//方法main結(jié)束}//類J_List結(jié)束,,2020/4/25,38,示例:AppletExample.html,小應(yīng)用程序例程——圖像顯示,,2020/4/25,39,編譯,運(yùn)行)以及行分隔符(如\n或\r\n)之外,Applet找不到與本地計(jì)算機(jī)有關(guān)的任何信息。特別是,小應(yīng)用程序找不到用戶名、電子郵件地址等。(5)一個(gè)小應(yīng)用程序彈出的所有窗口都會(huì)發(fā)出一條警告消息。,,2020/4/25,45,8.7.2Applet沙箱,Java提供的安全模型即沙箱模型。沙箱是Java編程語(yǔ)言和開(kāi)發(fā)環(huán)境中的程序區(qū)及規(guī)則,程序員建立當(dāng)作網(wǎng)頁(yè)發(fā)送的Java代碼(Applet)時(shí)需要使用它。由于Applet自動(dòng)當(dāng)作一部分網(wǎng)頁(yè)發(fā)送,并且一到達(dá)就運(yùn)行,如果它允許無(wú)限制訪問(wèn)內(nèi)存和操作系統(tǒng),那么Applet就很容易偶然或故意制造損害。沙箱的限制對(duì)Applet可能請(qǐng)求或訪問(wèn)的系統(tǒng)資源提供了嚴(yán)格限制。實(shí)際上,程序員必須編寫只在沙箱內(nèi)作用的代碼??砂焉诚湎胂蟪捎?jì)算機(jī)內(nèi)Applet代碼可自由作用的一小塊區(qū)域。,,2020/4/25,46,8.8實(shí)例研究:顯示動(dòng)畫,動(dòng)畫是JavaApplet最吸引人的特性之一。如果不用圖像,用Java實(shí)現(xiàn)動(dòng)畫的原理就與放映動(dòng)畫片相似:在短時(shí)間內(nèi)快速地順序顯示圖片。顯示動(dòng)畫的原理與顯示圖片類似,可以使用Graphics類中的drawImage()方法顯示圖片。因?yàn)镚IF被分解為多個(gè)文件,所以只要順序顯示文件即可達(dá)到動(dòng)畫的效果。可以使用repaint()方法不斷讓Applet顯示新的圖片。本小節(jié)將介紹在Java中編寫動(dòng)畫的原理,還將介紹關(guān)于畫布重新繪制的問(wèn)題。,,2020/4/25,47,8.8.1動(dòng)畫原理及重新繪制,1.編寫動(dòng)畫的原理動(dòng)畫程序其實(shí)不難,只要讓程序根據(jù)一定的規(guī)則不斷地對(duì)畫布進(jìn)行重新繪制即可。一般的實(shí)現(xiàn)策略是,將繪制的規(guī)則編寫到paint()方法中,定時(shí)讓paint()方法重新繪制畫布即可。2.重新繪制前面介紹動(dòng)畫編寫的原理時(shí),涉及到了使用paint()方法進(jìn)行重繪的問(wèn)題。要特別注意的是,不能直接調(diào)用paint()方法進(jìn)行重繪,而應(yīng)該調(diào)用畫布的repaint()方法請(qǐng)求系統(tǒng)執(zhí)行paint()方法進(jìn)行重繪。,,2020/4/25,48,8.8.2Timer類簡(jiǎn)介,開(kāi)發(fā)動(dòng)畫時(shí)經(jīng)常需要定時(shí)執(zhí)行指定的任務(wù),可以自己開(kāi)發(fā)一個(gè)線程來(lái)實(shí)現(xiàn)。如果任務(wù)很簡(jiǎn)單,自己開(kāi)發(fā)線程就不是很合算。為了簡(jiǎn)化開(kāi)發(fā),Swing中專門提供了一個(gè)用來(lái)定時(shí)執(zhí)行任務(wù)的類—javax.swing.Timer。使用Timer類來(lái)開(kāi)發(fā)定時(shí)執(zhí)行指定任務(wù)的類非常簡(jiǎn)單,該類僅提供了一個(gè)構(gòu)造器,聲明如下。publicTimer(intdelay,ActionListenerlistener)參數(shù)delay為指定的初始延遲和動(dòng)作事件間延遲的毫秒數(shù)。參數(shù)listener為指定的初始監(jiān)聽(tīng)器,可以為null。,,2020/4/25,49,8.9小結(jié),Applet能夠帶來(lái)更豐富的顯示效果。本章介紹了如何創(chuàng)建Applet,Applet的相關(guān)屬性及安全機(jī)制。通過(guò)本章的學(xué)習(xí),可以結(jié)合Java的GUI編程,創(chuàng)建出更好的Applet程序。,,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- javaApplet 應(yīng)用程序
鏈接地址:http://zhongcaozhi.com.cn/p-11496729.html