動畫-圖形界面綜合應用.ppt

上傳人:za****8 文檔編號:14703691 上傳時間:2020-07-29 格式:PPT 頁數(shù):25 大?。?.41MB
收藏 版權申訴 舉報 下載
動畫-圖形界面綜合應用.ppt_第1頁
第1頁 / 共25頁
動畫-圖形界面綜合應用.ppt_第2頁
第2頁 / 共25頁
動畫-圖形界面綜合應用.ppt_第3頁
第3頁 / 共25頁

下載文檔到電腦,查找使用更方便

9.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《動畫-圖形界面綜合應用.ppt》由會員分享,可在線閱讀,更多相關《動畫-圖形界面綜合應用.ppt(25頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、第20章 動畫圖形界面綜合應用,能力目標: 能編寫“氣球飄飄”程序,定時播放若干個大小不等的彩色橢圓。 能編寫圖像幻燈片程序,并結合多線程,設定時間間隔自動放映。 能編寫“空中飛翔”動畫程序,并能設定間隔時間以控制放映的速度,還能手工定格動畫畫面。,內容介紹,20.1 任務預覽 20.2 氣球飄飄 20.3 圖像幻燈片 20.4 動畫 20.5 本章小結 20.6 實訓20:編寫動畫程序,20.1 任務預覽,本章實訓程序運行結果:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,20.2 氣球飄飄,【例20-1】編寫在窗框繪制橢圓的程序,要求在窗框上

2、繪制10個彩色橢圓,各橢圓大小和位置不一,但最大不超過窗框尺寸的五分之一,并且各橢圓的色彩不盡相同。 分析:各橢圓位置和大小不一,色彩不一,涉及到隨機數(shù)問題。,,class Frame1 extends JFrame //窗框類 Random rand = new Random(); //隨機對象 public Frame1() this.setTitle(隨機繪制10個彩色橢圓); this.setBounds(100, 100, 300, 250); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.se

3、tVisible(true); public void paint(Graphics g) //繪制方法 int width, height; //窗框寬、高 width = this.getWidth(); height = this.getHeight(); g.setColor(Color.WHITE); g.fillRect(0, 0, width, height); int x, y, w, h; Color color; //橢圓左、上、寬、高與顏色 for (int i=1; i<=10; i++) x = rand.nextInt(widt

4、h); y = rand.nextInt(height); w = rand.nextInt(width/5); h = rand.nextInt(height/5); color = new Color(rand.nextInt(256),rand.nextInt(256), rand.nextInt(256)); g.setColor(color); g.drawOval(x, y, w, h); ,【例20-2】編寫“氣球飄飄”程序:在窗框中每隔一定時間(如半秒)隨機產(chǎn)生10個模擬氣球的實心橢圓。,各氣球大小、位置和色彩不一,最大不超過窗框尺寸的五分之一。 本

5、例代碼絕大部分與例20-1相同。,,,class Frame2 extends JFrame //窗框類 Random rand = new Random(); //隨機對象 public Frame2() //構造方法 public void paint(Graphics g) //繪制方法 int width, height; //窗框寬、高 int x, y, w, h; //橢圓左、上、寬、高 for (int i=1; i<=10; i++) //循環(huán)10次 x = rand.nextInt(width); color

6、 = new Color(rand.nextInt(256), ); //顏色隨機 g.setColor(color); g.fillOval(x, y, w, h); try Thread.sleep(500); //休眠500毫秒,即半秒 catch(InterruptedException e) this.repaint(); //重繪 ,運用多線程編寫“氣球飄飄”程序,修改例20-2代碼: class Frame2 extends JFrame implements Runnable ... public void run() //線程運行

7、方法 while(true) try Thread.sleep(500); //休眠500毫秒,即半秒 catch(InterruptedException e) this.repaint(); //重繪 public void paint(Graphics g) ... //去掉sleep和repaint語句 public class Example2 //主類 public static void main(String args) Frame2 frame = new Frame2(); Thread thread = new Thread(f

8、rame); //構建線程 thread.start(); ,20.3 圖像幻燈片,【例20-3】編寫圖像幻燈片程序,運行時循環(huán)放映6幅存放在文件中的圖像。 說明:為方便編程,各個圖像文件統(tǒng)一格式命名,如命名為child0.jpgchild5.jpg,并放在圖像文件夾images中。 在Eclipse環(huán)境中編程,把images放在項目的根目錄中。 不能直接顯示圖像文件,必須構建6個圖像對象。使用數(shù)組來存放。,,,,,,class Frame3 extends JFrame //窗框類 Image imgs = new Image6; //構建圖像數(shù)組 int index =

9、0; //數(shù)組索引 public Frame3() //構造方法 public void initialize() //初始化方法 for (int i=0; i<6; i++) imgsi = Toolkit.getDefaultToolkit(). createImage(images/child+i+.jpg); public void paint(Graphics g) //繪制方法 g.setColor(Color.WHITE); g.fillRect(0, 0, this.getWidth(), this.getHei

10、ght()); g.drawImage(imgsindex, 10, 40, 120, 150, this); try Thread.sleep(500); //休眠500毫秒 catch(InterruptedException e) index ++; if (index==6) index = 0; //索引循環(huán) this.repaint(); ,【例20-4】編寫可控制的圖像幻燈片程序,通過工具欄的5個按鈕“放映”、“停止”、“定時”、“上翻”和“下翻”,以控制圖像的放映狀態(tài)。,class Frame4 extends JFrame //窗框類 JTo

11、olBar toolBar = new JToolBar(工具欄); JButton buttonPlay = new JButton(放映); JButton buttonStop = new JButton(停止); JButton buttonTime = new JButton(定時); JButton buttonUp = new JButton(上翻); JButton buttonDwon = new JButton(下翻);,,,,Image imgs = new Image6; //構建圖像數(shù)組 int index = 0; int time = 500; MyCa

12、nvas canvas = new MyCanvas(); //自定義的畫布 Thread thread; boolean stopFlag = true; public Frame4() //構造方法 public void initialize() //初始化方法 for (int i=0; i<6; i++) imgsi = Toolkit.getDefaultToolkit(). createImage(images/child+i+.jpg); buttonPlay.addActionListener(new ActionHandler());

13、 toolBar.add(buttonPlay); this.add(toolBar, BorderLayout.NORTH); this.add(canvas, BorderLayout.CENTER); buttonStop.setEnabled(false); //初始禁用“停止”按鈕 ,//按鈕動作事件監(jiān)聽處理類(內部類): class ActionHandler implements ActionListener public void actionPerformed(ActionEvent e) if(e.getSource()==buttonPlay) thread =

14、 new Thread(canvas); //構建線程 stopFlag = false; buttonPlay.setEnabled(false); //禁用“放映”按鈕 buttonStop.setEnabled(true); //啟用“停止”按鈕 thread.start(); //啟動線程 else if(e.getSource()==buttonStop) //若是“停止”按鈕 stopFlag = true; //設置停止標記 thread = null; buttonPlay.setEnabled(true); //啟用“放映”按鈕 butto

15、nStop.setEnabled(false); //禁用“停止”按鈕 ,else if(e.getSource()==buttonTime) //若是“定時”按鈕 String str = JOptionPane.showInputDialog( 請設定每幅圖的放映時間(單位:毫秒), time); if (str == null) return; //若輸入框按了“取消”按鈕 try int t = Integer.parseInt(str); if (t<0) throw new Exception(警告:請輸入正整數(shù)!); time = t; catch(Excepti

16、on ex) JOptionPane.showMessageDialog(null, ex.getMessage()); else if(e.getSource()==buttonUp) //若是“上翻”按鈕 index --; if (index==-1) index = 5; //索引循環(huán) canvas.repaint(); else if(e.getSource()==buttonDwon) //若是“下翻”按鈕 index ++; if (index==6) index = 0; //索引循環(huán) canvas.repaint(); ,//自定義畫布類(內部類),該類與

17、線程關聯(lián): class MyCanvas extends Canvas implements Runnable public void paint(Graphics g) //繪制方法 g.setColor(Color.WHITE); g.fillRect(0, 0, this.getWidth(), this.getHeight()); g.drawImage(imgsindex, 10, 10, 120, 150, this); public void run() //線程運行方法 while (true) if(stopFlag) break; //停

18、止放映 try Thread.sleep(time); catch(InterruptedException e) index ++; if (index==6) index = 0; //索引循環(huán) this.repaint(); //執(zhí)行paint方法重繪 ,20.4 動畫,動畫:活動的圖畫。在屏幕上顯示第一幀圖片,隔一小段時間如24分之一秒(約42毫秒)再顯示下一幀圖片,如此循環(huán)往復。 定時刷新橢圓“氣球”、自動放映圖像,都可以說是動畫,因為畫面不斷在“動”。 程序可實現(xiàn)動畫。最簡單動畫是圖像沿著一條固定軌跡作直線運動。為了渲染氣氛,可以使用一個背景圖作襯托。,20.4.1

19、窗框實現(xiàn)動畫,【例20-5】編寫“空中飛翔”動畫程序:藍天白云背景下,一個飛鳥從窗框右下角向左上角飛去,越飛越遠,圖像越來越小,消失后,下一飛鳥重復飛翔過程。 分析:只需使用兩個圖像文件,一作背景,二是飛鳥(前景)。兩個文件可放在Eclipse項目根目錄的images目錄。飛鳥往左上角方向運動越來越小,只需不斷減少圖像的顯示尺寸便可。為增強飛翔效果,飛鳥使用GIF圖像文件。,,class Frame5 extends JFrame //窗框類 Image backImage, foreImage; //背景圖、前景圖 int x=240, y=240, width=80,

20、height=80; //前景圖位置、尺寸 public Frame5() //構造方法 this.setTitle(簡單動畫); this.setBounds(100, 100, 300, 300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); initialize(); //調用初始化方法 this.setVisible(true); public void initialize() //初始化方法 Toolkit toolkit = Toolkit.getDefaul

21、tToolkit(); backImage = toolkit.createImage(images/cloud.jpg); foreImage = toolkit.createImage(images/flyer.gif); ,public void paint(Graphics g) //繪制方法 g.drawImage(backImage, 0, 0, 300, 300, this); g.drawImage(foreImage, x, y, width, height, this); try Thread.sleep(42); //休眠42毫秒 catch(Inter

22、ruptedException e) x-=6; y-=6; width-=2; height-=2; //更改前景圖位置和尺寸 if(x<0) x=300; y=300; width=100; height=100; //位置尺寸復位 this.repaint(); //執(zhí)行paint方法重繪 public class Example5 //主類 public static void main(String args) new Frame5(); 程序沒有使用多線程,沒有工具欄和按鈕。,20.4.2 面板實現(xiàn)動畫,【例20-6】改進例20-5的“空中飛翔”

23、動畫程序,添加工具欄和5個按鈕:“放映”、“停止”、“定時”、“上飛”和“下飛”,控制圖像放映狀態(tài)。 class Frame6 extends JFrame JToolBar toolBar = new JToolBar(工具欄); JButton buttonPlay = new JButton(放映); JButton buttonStop = new JButton(停止); JButton buttonTime = new JButton(定時); JButton buttonUp = new JButton(上飛); JButton buttonDwon = new JButton(

24、下飛); int time = 42; MyPanel pan = new MyPanel(); //自定義面板 Thread thread; //線程 boolean stopFlag = true; Image backImage, foreImage; int x=150, y=150, width=50, height=50;,,,public Frame6() //構造方法 public void initialize() //初始化方法 Toolkit toolkit = Toolkit.getDefaultToolkit(); //工具包

25、 backImage = toolkit.createImage(images/cloud.jpg); foreImage = toolkit.createImage(images/flyer.gif); buttonPlay.addActionListener(new ActionHandler()); buttonStop.addActionListener(new ActionHandler()); buttonTime.addActionListener(new ActionHandler()); buttonUp.addActionListener(new ActionHandler

26、()); buttonDwon.addActionListener(new ActionHandler()); toolBar.add(buttonPlay); this.add(toolBar, BorderLayout.NORTH); this.add(pan, BorderLayout.CENTER); buttonStop.setEnabled(false); //初始禁用“停止”按鈕 ,//按鈕動作事件監(jiān)聽處理類(內部類): class ActionHandler implements ActionListener public void actionPerformed(Act

27、ionEvent e) if(e.getSource()==buttonPlay) //“放映”按鈕 thread = new Thread(pan); stopFlag = false; buttonPlay.setEnabled(false); //禁用“放映”按鈕 thread.start(); //啟動線程 else if(e.getSource()==buttonStop) //“停止”按鈕 stopFlag = true; thread = null; buttonPlay.setEnabled(true); //啟用“放映”按鈕 els

28、e if(e.getSource()==buttonTime) //“定時”按鈕 String str = JOptionPane.showInputDialog( 請設定每幅圖的放映時間(單位:毫秒), time); if (str == null) return; //若輸入框按了“取消”按鈕 try int t = Integer.parseInt(str); if (t<0) throw new Exception(警告:請輸入正整數(shù)!); time = t; catch(Exception ex)showMessageDialog;,else if(e.getSou

29、rce()==buttonUp) //“上飛”按鈕 x-=6; y-=6; width-=2; height-=2; //減少前景圖位置和尺寸 if(x300) x=0; y=0; width=0; height=0; //前景圖位置和尺寸復位 pan.repaint(); //執(zhí)行面板paint方法重繪 ,//自定義面板類(內部類),該類與線程關聯(lián): class MyPanel extends JPanel implements Runnable public void paint(Graphics g) //繪制方法 g.drawImage(backImage,

30、0, 0, 300, 300, this); g.drawImage(foreImage, x, y, width, height, this); public void run() //線程運行方法 while (true) if(stopFlag) break; //停止放映 try Thread.sleep(time); //線程休眠 catch(InterruptedException e) x-=6; y-=6; width-=2; height-=2; //減少前景圖位置和尺寸 if(x<0)x=300; y=300; width=100; height=100; //復位 this.repaint(); //執(zhí)行paint方法重繪 public class Example6 new Frame6(); //主類,謝謝!返回目錄 結束放映,

展開閱讀全文
溫馨提示:
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對上載內容本身不做任何修改或編輯。若文檔所含內容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!