實驗 9 綜合練習
一、實驗目的
??? 將所學知識進行綜合運用,模仿設計具有實際意義的應用程序。鍛煉使用新類(沒有介紹的)類的能力。
二、實驗要求
在計算機上實現指導書中應用程序。
分析應用程序中使用了哪些系統類,指出使用該類的變量與方法。說明創建了什么類。包含什么變量與方法。
能根據實際需要使用不同的系統類編寫應用程序。
三、實驗內容
(一)幻燈機效果——連續顯示多幅圖像
程序功能:如果 Applet 僅僅是顯示一幅圖像,沒有什么特別的意義,不如直接在 HTML 文件中顯示圖像。本程序可以像幻燈機那樣連續顯示多幅圖像
在當前目錄中的 image 文件夾中準備 6 幅花的圖像文件。
編寫 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);
?????????? }
???????? }
在這個程序中,加載了 6 幅圖像,點擊鼠標可逐一顯示圖像,并在顯示完 6 幅圖像后自動返回第一幅重新開始。
對程序進行分析,寫出分析結果。
(二)使用滾動條改變背景顏色
1.?程序功能:移動滾動條可以改變背景顏色。運行結果如圖 8.2 所示。
2.?編寫 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("移動滾動條可改變背景顏色",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.對程序進行分析,寫出分析結果。
(三)Applet 與 Application 合并運行
??? Java Applet 和 Application 程序的區別在于運行方式不同。那么能不能將它們合并起來,讓同
一個程序既可以由瀏覽器運行又可以單獨運行呢?
??? 1.程序功能:在 Applet 與 Application 方式下都能運行。
??? 2.編寫 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"); // 創建窗口對象
??????? AppDemo app=new AppDemo(); // 創建程序對象
??????? window.add("Center", app); // 將程序對象添加到窗口
??????? app.init(); // 調用程序的初始化方法
??????? window.addWindowListener(new WindowAdapter() {
????????? public void windowClosing(WindowEvent e) {
??????????? System.exit(0);
????????? }
??????? }); // 以上用匿名類的方式為窗口添加關閉功能
??????? window.setSize(300,120); // 設定窗口大小
??????? window.setVisible(true); // 設定窗口可見
????? }
????? 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 的合并運行");
????? }
??? }
3.?編譯 KY9_3.java 源程序。
4.?編寫瀏覽 Applet 的頁面文件 KY9_3.html,在瀏覽器打開文件 KY9_3.htm
5.?在獨立運行的 Application 方式下運行 KY9_3.class 字節文件
(四)創建電閃雷鳴的動畫
??? 1.程序功能:本程序可以通過按鈕控制聲音和動畫的開始和停止操作。動畫顯示了電閃雷鳴的場面。注意:圖像文件要分別表現不同時間段的電閃場面,這樣才會有動畫效果。
??? 2.編寫 KY9_4.java 程序文件,源代碼如下。
??? import java.awt.*;
??? import java.applet.*;
??? import java.awt.event.*;
??? public class KY9_4 extends Applet implements Runnable,ActionListener {
??????? Image iImages[];?????????????????????? //圖像數組
??????? Thread aThread;
??????? int iFrame;??????????????????????????? //圖像數組下標
??? AudioClip au;???????????????????????? //定義一個聲音對象
??? 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("開始");
??????? 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();???????????? //線程啟動
??????????? b1.setEnabled(false);
??????? }
??? }
??? public void stop()? {
???? if (aThread != null) {
?????? aThread.interrupt();????????? //線程中斷
??????? aThread = null;
??????? au.stop();??????????????????? //停止播放聲音文件
???? }
}
public void run() {
??? while (true)
??? {
??????? iFrame++;
??????? iFrame %= (iImages.length); //下一幅圖像的下標
??????? repaint();
??????? try? {
??????????? Thread.sleep(50);
??????? }
??????? catch (InterruptedException e)
??????? {???????????????????????????? //中斷時拋出
?????????? break;??????????????????? //退出循環
??????? }
??? }
}
public void update(Graphics g) {
??? g.drawImage(iImages[iFrame],0,0,this);
}
public void actionPerformed(ActionEvent e) {
?? if ((e.getSource()==b1) && (aThread == null) )
?? { //單擊 Start 按鈕時觸發
??????? aThread = new Thread(this);
?????? aThread.start();????????????? //線程啟動
??????? b1.setEnabled(false);
?????????????? b2.setEnabled(true);
?????????????? au.loop();???????????????????? //循環播放聲音文件
????????? }
????????? if ((e.getSource()==b2) && (aThread != null) )
????????? {?????????????????????????????????? //單擊 Stop 按鈕時觸發
?????????????? aThread.interrupt();?????????? //線程中斷
?????????????? aThread = null;
?????????????? b1.setEnabled(true);
?????????????? b2.setEnabled(false);
?????????????? au.stop();???????????????????? //停止播放聲音文件
????????? }
????? }
?? }
?? 3.編譯源程序。
?? 4.編寫瀏覽 Applet 的頁面文件,在瀏覽器運行結果
評論
查看更多