動畫-圖形界面綜合應用.ppt
《動畫-圖形界面綜合應用.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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 九年級數(shù)學上冊 第三章 概率的進一步認識復習課件 (新版)北師大版
- 九年級數(shù)學上冊 第23章 圖形的相似 23.5 位似圖形授課課件 (新版)華東師大版
- 九年級歷史下冊 第四單元 第8課 美國經(jīng)濟的發(fā)展課件 新人教版
- 危急值報告及處理制度課件
- 高考小說閱讀-第三講:小說的敘述方式課件
- 國內管理學院評鑒現(xiàn)況及未來發(fā)展課件
- “圖形的認識與測量”知識梳理及教學策略課件
- 新版近視科普講座ppt課件
- 課件--迎接本科教學工作水平評估
- 現(xiàn)在完成進行時PPT幻燈片課件
- 高考語文大一輪總復習-散文閱讀-概括內容要點和主旨題題組訓練ppt課件-新人教版
- 工程材料計劃編制課件
- 工廠車間管理基礎知識課件
- 2015北師大版六年級數(shù)學總復習正比例與反比例課件
- 文明集會禮儀規(guī)范班會課件