實(shí)驗(yàn) 9 綜合練習(xí)
一、實(shí)驗(yàn)?zāi)康?
??? 將所學(xué)知識(shí)進(jìn)行綜合運(yùn)用,模仿設(shè)計(jì)具有實(shí)際意義的應(yīng)用程序。鍛煉使用新類(lèi)(沒(méi)有介紹的)類(lèi)的能力。
二、實(shí)驗(yàn)要求
在計(jì)算機(jī)上實(shí)現(xiàn)指導(dǎo)書(shū)中應(yīng)用程序。
分析應(yīng)用程序中使用了哪些系統(tǒng)類(lèi),指出使用該類(lèi)的變量與方法。說(shuō)明創(chuàng)建了什么類(lèi)。包含什么變量與方法。
能根據(jù)實(shí)際需要使用不同的系統(tǒng)類(lèi)編寫(xiě)應(yīng)用程序。
三、實(shí)驗(yàn)內(nèi)容
(一)幻燈機(jī)效果——連續(xù)顯示多幅圖像
程序功能:如果 Applet 僅僅是顯示一幅圖像,沒(méi)有什么特別的意義,不如直接在 HTML 文件中顯示圖像。本程序可以像幻燈機(jī)那樣連續(xù)顯示多幅圖像
在當(dāng)前目錄中的 image 文件夾中準(zhǔn)備 6 幅花的圖像文件。
編寫(xiě) KY9_1.java 程序文件,源代碼如下。
??????? import java.awt.*;
??????? import java.awt.event.*;
??????? import java.applet.*;
??????? public class KY8_1 extends Applet {
????????? int index;
????????? Image imgs[]=new Image[6];
????????? public void init(){
??????????? addMouseListener(new MouseAdapter() {
????????????? public void mouseClicked(MouseEvent e) {
??????????????? index=++index%6;
??????????????? repaint();
????????????? }
??????????? };
?????????? for (int i=0; i<6; i++)
????????????? imgs[i]=getImage(getCodeBase(),"image/花"+(i+1)+".gif");
?????????? }
?????????? public void paint(Graphics g){
??????????? if (imgs[index]!=null)
????????????? g.drawImage(imgs[index],60,20,this);
?????????? }
???????? }
在這個(gè)程序中,加載了 6 幅圖像,點(diǎn)擊鼠標(biāo)可逐一顯示圖像,并在顯示完 6 幅圖像后自動(dòng)返回第一幅重新開(kāi)始。
對(duì)程序進(jìn)行分析,寫(xiě)出分析結(jié)果。
(二)使用滾動(dòng)條改變背景顏色
1.?程序功能:移動(dòng)滾動(dòng)條可以改變背景顏色。運(yùn)行結(jié)果如圖 8.2 所示。
2.?編寫(xiě) KY9_2.java 程序文件,源代碼如下。
?? import java.applet.Applet;
?? import java.awt.*;
?? import java.awt.event.*;
?? import java.awt.Scrollbar;
?? import java.awt.Color;
?? public class KY8_2 extends Applet implements AdjustmentListener {
???? Scrollbar r1,r2,r3;
???? int red,green,blue;
???? TextField t;Label a;
???? public void init() {
??????? setLayout(null);
??????? r1=new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,255);
??????? r2=new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,255);
??????? r3=new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,255);
??????? t=new TextField("0",5);
??????? t.setEditable(false);
??????? a=new Label("移動(dòng)滾動(dòng)條可改變背景顏色",Label.CENTER);
??????? add(a);a.setBounds(120,10,150,15);
??????? add(r1);r1.setBounds(20,30,100,20);
??????????? add(r2);r2.setBounds(140,30,100,20);
??????????? add(r3);r3.setBounds(260,30,100,20);
??????????? add(t);t.setBounds(20,120,220,18);
??????????? r1.addAdjustmentListener (this);
??????????? r2.addAdjustmentListener (this);
??????????? r3.addAdjustmentListener (this);
????????? }
??????? public void adjustmentValueChanged(AdjustmentEvent e) {
??????? red=r1.getValue();
??????? green=r2.getValue();
??????? blue=r3.getValue();
??????? t.setText("red 的值"+String.valueOf(r1.getValue())+
??????? ",green 的值"+String.valueOf(r2.getValue())+",blue 的值"+
??????? String.valueOf(r3.getValue()));
??????? Color c=new Color(red,green,blue);
??????? setBackground(c);
??????? }
??????? }
??? 3.對(duì)程序進(jìn)行分析,寫(xiě)出分析結(jié)果。
(三)Applet 與 Application 合并運(yùn)行
??? Java Applet 和 Application 程序的區(qū)別在于運(yùn)行方式不同。那么能不能將它們合并起來(lái),讓同
一個(gè)程序既可以由瀏覽器運(yùn)行又可以單獨(dú)運(yùn)行呢?
??? 1.程序功能:在 Applet 與 Application 方式下都能運(yùn)行。
??? 2.編寫(xiě) KY9_3.java 程序文件,源代碼如下。
??? import java.applet.*;
??? import java.awt.*;
??? import java.awt.event.*;
??? public class KY9_3 extends Applet implements ActionListener {
????? Button button;
????? TextField field;
????? public static void main(String[] args) {
??????? Frame window=new Frame("AppDemo"); // 創(chuàng)建窗口對(duì)象
??????? AppDemo app=new AppDemo(); // 創(chuàng)建程序?qū)ο?
??????? window.add("Center", app); // 將程序?qū)ο筇砑拥酱翱?
??????? app.init(); // 調(diào)用程序的初始化方法
??????? window.addWindowListener(new WindowAdapter() {
????????? public void windowClosing(WindowEvent e) {
??????????? System.exit(0);
????????? }
??????? }); // 以上用匿名類(lèi)的方式為窗口添加關(guān)閉功能
??????? window.setSize(300,120); // 設(shè)定窗口大小
??????? window.setVisible(true); // 設(shè)定窗口可見(jiàn)
????? }
????? public void init() {
??????? button=new Button("顯示");
??????? button.addActionListener(this);
??????? field=new TextField(23);
??????? add(field);
??????? add(button);
????? }
????? public void actionPerformed(ActionEvent e) {
??????? field.setText("Applet 與 Application 的合并運(yùn)行");
????? }
??? }
3.?編譯 KY9_3.java 源程序。
4.?編寫(xiě)瀏覽 Applet 的頁(yè)面文件 KY9_3.html,在瀏覽器打開(kāi)文件 KY9_3.htm
5.?在獨(dú)立運(yùn)行的 Application 方式下運(yùn)行 KY9_3.class 字節(jié)文件
(四)創(chuàng)建電閃雷鳴的動(dòng)畫(huà)
??? 1.程序功能:本程序可以通過(guò)按鈕控制聲音和動(dòng)畫(huà)的開(kāi)始和停止操作。動(dòng)畫(huà)顯示了電閃雷鳴的場(chǎng)面。注意:圖像文件要分別表現(xiàn)不同時(shí)間段的電閃場(chǎng)面,這樣才會(huì)有動(dòng)畫(huà)效果。
??? 2.編寫(xiě) KY9_4.java 程序文件,源代碼如下。
??? import java.awt.*;
??? import java.applet.*;
??? import java.awt.event.*;
??? public class KY9_4 extends Applet implements Runnable,ActionListener {
??????? Image iImages[];?????????????????????? //圖像數(shù)組
??????? Thread aThread;
??????? int iFrame;??????????????????????????? //圖像數(shù)組下標(biāo)
??? AudioClip au;???????????????????????? //定義一個(gè)聲音對(duì)象
??? Button b1,b2;
??? public void init() {
??????? int i,j;
??????? iFrame=0;
??????? aThread=null;
??????? iImages = new Image[10];
?????? for (i=0;i<10;i++)? {
????????? iImages[i] =getImage(getCodeBase(),"image/"+"tu"+(i+1)+".JPG");
??????? }
??????? au=getAudioClip(getDocumentBase(),"Wav/Sound.wav");
??????? au.play();??????????????????????? //播放一次聲音文件
??????? Panel p1 = new Panel();
??????? b1 = new Button("開(kāi)始");
??????? b2 = new Button("停止");
??????? p1.add(b1);
??????? p1.add(b2);
??????? b1.addActionListener(this);
??????? b2.addActionListener(this);
??????? setLayout(new BorderLayout());
??????? add(p1,"South");
??? }
??? public void start()? {
??????? if (aThread == null)
??????? {
??????????? aThread = new Thread(this);
??????????? aThread.start();???????????? //線(xiàn)程啟動(dòng)
??????????? b1.setEnabled(false);
??????? }
??? }
??? public void stop()? {
???? if (aThread != null) {
?????? aThread.interrupt();????????? //線(xiàn)程中斷
??????? aThread = null;
??????? au.stop();??????????????????? //停止播放聲音文件
???? }
}
public void run() {
??? while (true)
??? {
??????? iFrame++;
??????? iFrame %= (iImages.length); //下一幅圖像的下標(biāo)
??????? repaint();
??????? try? {
??????????? Thread.sleep(50);
??????? }
??????? catch (InterruptedException e)
??????? {???????????????????????????? //中斷時(shí)拋出
?????????? break;??????????????????? //退出循環(huán)
??????? }
??? }
}
public void update(Graphics g) {
??? g.drawImage(iImages[iFrame],0,0,this);
}
public void actionPerformed(ActionEvent e) {
?? if ((e.getSource()==b1) && (aThread == null) )
?? { //單擊 Start 按鈕時(shí)觸發(fā)
??????? aThread = new Thread(this);
?????? aThread.start();????????????? //線(xiàn)程啟動(dòng)
??????? b1.setEnabled(false);
?????????????? b2.setEnabled(true);
?????????????? au.loop();???????????????????? //循環(huán)播放聲音文件
????????? }
????????? if ((e.getSource()==b2) && (aThread != null) )
????????? {?????????????????????????????????? //單擊 Stop 按鈕時(shí)觸發(fā)
?????????????? aThread.interrupt();?????????? //線(xiàn)程中斷
?????????????? aThread = null;
?????????????? b1.setEnabled(true);
?????????????? b2.setEnabled(false);
?????????????? au.stop();???????????????????? //停止播放聲音文件
????????? }
????? }
?? }
?? 3.編譯源程序。
?? 4.編寫(xiě)瀏覽 Applet 的頁(yè)面文件,在瀏覽器運(yùn)行結(jié)果
評(píng)論