绘图与多媒体

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Ch09繪圖與多媒體JAVA程式設計進階(I)2019/10/132大綱•繪圖的基礎•Graphics類別的色彩、文字與繪圖•圖片的載入與顯示•動畫效果•JavaApplet的圖片載入•音樂的播放2019/10/133Graphics繪圖類別-取得Graphics繪圖類別•在JavaApplet程式範例已經說明過paint()方法繪出文字和簡單圖形,使用的是Graphics類別的方法。•在Java執行繪圖功能需要使用「圖形內容」(GraphicsContexts)的Graphics物件,繪製的文字、影像和圖形都是繪製在此畫布物件上,如同將GUI元件新增到JFrame物件的ContentPane物件一般。2019/10/134範例1:使用Applet呈現圖•Ch11_10.java1.importjava.applet.Applet;2.importjava.awt.*;3.publicclassCh11_10extendsApplet4.{5.publicvoidpaint(Graphicsg)6.{7.setBackground(Color.lightGray);8.g.setColor(Color.red);9.g.fillRect(10,10,100,100);10.}11.}•Ch11_10.html1.HTML2.head3.titleCh11_10.html/title4./head5.body6.hr7.center8.applet9.code=Ch11_10.class10.width=20011.height=20012.13./applet14./center15.hr16./body17./html2019/10/135Graphics繪圖類別-paint()方法•繼承自Component元件的paint()方法在呼叫時,其傳入參數就是Graphics物件,如下所示:publicvoidpaint(Graphicsg){………}•在上述的paint()方法呼叫繪圖方法,就可以在元件上繪出圖形。2019/10/136範例2:使用JFrame類別的畫布1.importjavax.swing.*;2.importjava.awt.*;3.importjava.awt.event.*;4.classCh11_11extendsJFrame5.{6.Ch11_11()7.{8.super(JFrame畫布);9.Containerc=getContentPane();10.c.setBackground(Color.lightGray);11.}12.publicvoidpaint(Graphicsg)13.{14.g.setColor(Color.red);15.g.fillRect(10,10,100,100);16.}17.publicstaticvoidmain(String[]args)18.{19.//建立Swing應用程式20.Ch11_11app=newCh11_11();21.//關閉視窗事件,結束程式的執行22.app.addWindowListener(newWindowAdapter()23.{publicvoidwindowClosing(WindowEventevt)24.{System.exit(0);}25.});26.app.setSize(300,200);//設定尺寸27.app.setVisible(true);//顯示視窗28.}29.}2019/10/137Graphics繪圖類別-getGraphics()方法•在paint()方法之外的其它方法執行繪圖,可以使用getGraphics()方法取得元件的Graphics物件,如下所示:Graphicsg=app.getGraphics();•上述程式碼取得app元件的Graphics物件,接著就可以呼叫繪圖方法在元件上繪出圖形。2019/10/138範例3:使用getGraphics()1.importjavax.swing.*;2.importjava.awt.*;3.importjava.awt.event.*;4.classCh11_12extendsJFrame5.{6.Ch11_12()7.{8.super(JFrame畫布);9.Containerc=getContentPane();10.c.setBackground(Color.lightGray);11.}12.publicstaticvoidmain(String[]args)13.{14.//建立Swing應用程式15.Ch11_12app=newCh11_12();16.//關閉視窗事件,結束程式的執行17.app.addWindowListener(newWindowAdapter()18.{publicvoidwindowClosing(WindowEventevt)19.{System.exit(0);}20.});21.app.setSize(300,200);//設定尺寸22.app.setVisible(true);//顯示視窗23.//利用getGraphics()取得GraphicsContext24.Graphicsg=app.getGraphics();25.g.setColor(Color.red);26.g.fillRect(10,10,100,100);27.}28.}2019/10/139Graphics繪圖類別-Swing的paintComponent()方法•對於繼承自Swing元件的類別。例如:JPanel建立的畫布時,繪圖方法的程式碼是位於覆寫的paintComponent()方法,如下所示:classUserPanelextendsJPanel{//建構子publicUserPanel(){………}publicvoidpaintComponent(Graphicsg){………}}2019/10/1310範例4:JPanel類別的畫布1.importjavax.swing.*;2.importjava.awt.*;3.importjava.awt.event.*;4.classCh11_13extendsJFrame5.{6.GraphicPanelgPanel=newGraphicPanel();7.Ch11_13()8.{9.super(JPanel畫布);10.Containerc=getContentPane();11.c.setLayout(newFlowLayout());12.c.setBackground(Color.lightGray);13.c.add(gPanel);14.Graphicsg=gPanel.getGraphics();15.repaint();16.}17.classGraphicPanelextendsJPanel18.{19.GraphicPanel()20.{21.setPreferredSize(newDimension(200,150));22.}23.publicvoidpainComponent(Graphicsg)24.{25.super.paintComponent(g);26.g.setColor(Color.red);27.g.fillRect(10,10,100,100);28.}29.}30.publicstaticvoidmain(String[]args)31.{32.//建立Swing應用程式33.Ch11_13app=newCh11_13();34.//關閉視窗事件,結束程式的執行35.app.addWindowListener(newWindowAdapter()36.{publicvoidwindowClosing(WindowEventevt)37.{System.exit(0);}38.});39.app.setSize(300,200);//設定尺寸40.app.setVisible(true);//顯示視窗41.}42.}2019/10/1311Graphics繪圖類別-再談paint()和repaint()方法•Swing元件屬於JComponent的子類別,同時繼承Component的paint()和repaint()方法,因為元件繪圖操作大都是呼叫paint()方法完成,paint()方法非常總明,能夠在使用者調整視窗尺寸(例如:縮小和放大元件的視窗)等操作後,或是執行setText()等方法改變元件內容時,自動重新呼叫repaint()方法重繪調整後的圖形和元件。2019/10/1312座標系統與JComponent元件-說明•電腦螢幕的座標系統是使用「像素」(Pixels)為單位,Graphics物件的畫布是一張長方形區域,左上角為原點,其座標是(0,0),X軸從左到右,Y軸由上到下,如下圖所示:2019/10/1313座標系統與JComponent元件-取得尺寸•座標系統可以使用JComponent元件的getWidth()、getHeight()方法取得元件的寬和高,因為元件的四周預設有邊線,所以需要使用getInsets()取得邊線left、right、top和bottom的尺寸,如下所示:Insetsins=getInsets();intwidth=getWidth()-(ins.left+ins.right);intheight=getHeight()-(ins.top+ins.bottom);2019/10/1314JFrame類別的畫布-說明•Java應用程式可以將整個JFrame視窗或某個Swing元件作為畫布,如果是JFrame畫布,只需在paint()方法撰寫繪圖方法的程式碼,就可以在視窗繪出所需圖形。2019/10/1315JFrame類別的畫布-繪圖•如果不是在paint()方法,Java程式碼需要使用getGraphics()方法取得Grphics物件後,在Graphics物件繪出所需圖形,如下所示:Graphicsg=app.getGraphics();g.setColor(Color.green);g.fillOval(100,100,40,40);2019/10/1316JPanel類別的畫布•Swing的JPanel元件可以取代AWT的Canvas類別畫布,JPanel預設提供「雙緩衝區」(DoubleBuffering)繪圖功能,所有元件的繪圖都是在幕後完成後,才會一次顯示到螢幕上,所以可以加速圖形的顯示。2019/10/1317指定色彩-建立Color物件•Java色彩是java.awt.Color的Color物件,這是使用RGB色彩以不同程度的紅、綠和藍3原色混合出的Color色彩物件,如下所示:ColormyColor=newColor(r,g,b);•上述參數r、g和b如為int整數,其範圍是0~255,如為float是0.0~1.0。2019/10/1318指定色彩-指定色彩方法•在建立好Color物件後,可以使用Graphics類別的方法指定色彩,相關方法如下表所示:方法說明voidsetColor(Color)設定色彩為參數的Color物件ColorgetColor()取得目前的Color物件2019/10/1319指定字型-建立Font物件•Java的字型是java.awt.Font的Font物件,這是代表指定尺寸和樣式的字型,如下所示:FolotmyFont=newFont(新細明體,Font.PLAIN,30);•上述參數分別是字型名稱、樣式和尺寸。2019/10/1320指定字型-指定字型方法•在建立好Font物件後,可以使用Graphics類別的方法指定字型,相關方法如下表所示:方法說明voidsetFont(Font)設定字型為參數的Font物件FontgetFont()取得目前使用的

1 / 63
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功