![第9章-文字與圖形GUI設(shè)計課件_第1頁](http://file4.renrendoc.com/view/ab748f87b53834c5c944e28512659bc9/ab748f87b53834c5c944e28512659bc91.gif)
![第9章-文字與圖形GUI設(shè)計課件_第2頁](http://file4.renrendoc.com/view/ab748f87b53834c5c944e28512659bc9/ab748f87b53834c5c944e28512659bc92.gif)
![第9章-文字與圖形GUI設(shè)計課件_第3頁](http://file4.renrendoc.com/view/ab748f87b53834c5c944e28512659bc9/ab748f87b53834c5c944e28512659bc93.gif)
![第9章-文字與圖形GUI設(shè)計課件_第4頁](http://file4.renrendoc.com/view/ab748f87b53834c5c944e28512659bc9/ab748f87b53834c5c944e28512659bc94.gif)
![第9章-文字與圖形GUI設(shè)計課件_第5頁](http://file4.renrendoc.com/view/ab748f87b53834c5c944e28512659bc9/ab748f87b53834c5c944e28512659bc95.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第9章 文字與圖形GUI設(shè)計9.1 GUI設(shè)計概述9.2 繪制文字9.3 Color類9.4 繪制形狀圖形習題9 9.1 GUI設(shè)計概述 圖形用戶界面(Graphics User Interface,簡稱GUI)就是為應(yīng)用程序提供一個圖形化的界面。GUI使用圖形的方式借助菜單、按鈕等標準界面元素和鼠標操作,幫助用戶方便地向計算機系統(tǒng)發(fā)出命令、啟動操作,并將系統(tǒng)運行的結(jié)果同樣以圖形的方式顯示給用戶,使一個應(yīng)用程序具有畫面生動、操作簡便的效果,省去了字符界面中用戶必須記憶各種命令的麻煩,深受廣大用戶的喜愛和歡迎,已經(jīng)成為目前幾乎所有應(yīng)用軟件的既成標準。 為了方便編程人員開發(fā)圖形用戶界面,Java提
2、供了抽象窗口工具包(Abstract Windowing ToolKit,縮寫為AWT)和Swing包這兩個圖形用戶界面工具包。在這兩個工具包中提供了豐富的類庫來支持編程人員創(chuàng)建與平臺無關(guān)的用戶界面。編程人員可方便地使用這些類庫來生成各種標準圖形界面元素并處理圖形界面的各種事件。9.1.1 圖形用戶界面元素分類 1容器 容器是用來組織或容納其他界面成分和元素的組件。一個容器可以包含許多組件,同時它本身也可以作為一個組件,放進另一容器中。一般來說,一個應(yīng)用程序的圖形用戶界面首先對應(yīng)于一個復雜的容器,例如一個窗口。這個容器內(nèi)部將包含許多界面成分和元素,其中某些界面元素本身也可能又是一個容器,這個容
3、器再進一步包含它的界面成分和元素,依此類推就構(gòu)成一個復雜的圖形界面系統(tǒng)。 容器是Java中的類,例如框架(JFrame)、面版(JPanel)及滾動面板(JScrollPanel)等類。容器的引入有利于分解圖形用戶界面的復雜性。當界面的功能較多時,使用層層相套的容器是非常必要的。 2控制組件 與容器不同,控制組件是圖形用戶界面的最小單位之一,它里面不再包含其他的成分。控制組件的作用是完成與用戶的一次交互,包括接收用戶的一個命令(如菜單命令),接收用戶輸入的一個文本或選擇,向用戶顯示一段文本或一個圖形等等。 從某種程度上來說,控制組件是圖形用戶界面標準化的結(jié)果,目前常用的控制組件有選擇類的單選按
4、鈕、復選按鈕、下拉列表,有文字處理類的文本框、文本區(qū)域,有命令類的按鈕、菜單等。使用控制組件,通常需要如下的步驟: (1) 創(chuàng)建某控制組件類的對象,指定其大小等屬性。 (2) 使用某種布局策略,將該控制組件對象加入到某個容器中的指定位置處。 (3) 將該組件對象注冊給所能產(chǎn)生的事件對應(yīng)的事件監(jiān)聽程序,重載事件處理方法,實現(xiàn)利用該組件對象與用戶交互的功能。 3用戶自定義成分 除了上述的標準圖形界面元素外,編程人員還可以根據(jù)用戶的需要,使用各種字型、字體和色彩設(shè)計一些幾何圖形、標志圖案等,它們被稱為用戶自定義成分。用戶自定義成分通常只能起到裝飾、美化的作用,而不能響應(yīng)用戶的動作,也不具有交互功能。
5、 由于用戶自定義成分易于學習和掌握,同時,各種基本圖形和說明性文字又是容器和控制組件的基本成分,而且考慮到由淺入深的學習規(guī)律,因此我們先在本章利用AWT包學習用戶自定義成分,在第9章和第10章再學習控制組件和復雜的容器。9.1.2 Applet的執(zhí)行程序 Applet是一種執(zhí)行于Web瀏覽器的小程序,是通過應(yīng)用程序架構(gòu)開發(fā)而得到的。在我們編寫Web瀏覽器程序時,我們必須繼承class Applet或class JApplet,必須覆蓋必要的Applet 的成員方法,這些成員方法控制了Web頁面上的applet的生成與執(zhí)行。為此,有必要先介紹Applet應(yīng)用程序的執(zhí)行過程及其所引用的方法。我們編
6、寫的每個Applet小程序都是Applet類的子類,在實際運行中,瀏覽器在下載字節(jié)碼的同時,會自動創(chuàng)建一個用戶Applet子類的對象,并在適當事件發(fā)生時自動調(diào)用該對象的幾個主要方法。下面說明這些方法及其引用過程。 (1) init( )方法。當Applet程序啟動時自動調(diào)用init( )方法。init ( )方法僅用來做初始化操作。用戶程序可以重載父類的init( )方法,通過init( )方法初始化圖像文件、聲音文件、字體或者其他一些對象等。(2) start( )方法。Applet運行init( )方法之后將自動調(diào)用start( )方法,start( )方法體現(xiàn)了小應(yīng)用程序要完成的功能。我
7、們可以重載父類的start( )方法,在這個方法體內(nèi)實現(xiàn)我們程序的功能。 (3) paint( )方法。它的主要作用是在Applet的界面中顯示文字、圖形和其他界面元素。瀏覽器調(diào)用paint( )方法的事件主要有如下三種。 當瀏覽器首次顯示Applet時,會自動調(diào)用paint( )方法。 當用戶調(diào)整窗口大小或移動窗口時,瀏覽器會調(diào)用paint( )方法。 當repaint( )方法被調(diào)用時,系統(tǒng)將首先調(diào)用update( )方法將Applet對象所占用的屏幕空間清空,然后調(diào)用paint( )方法重畫。 (4) stop( )方法。當用戶將瀏覽Applet程序所在的Web頁面切換到其他頁面時,瀏覽
8、器會自動調(diào)用stop( )方法,讓Applet程序終止運行。如果用戶又回到Applet程序所在的Web頁面,則瀏覽器將重新啟動Applet程序的start( )方法。(5) destroy( )方法。當用戶關(guān)閉Applet程序窗口時,瀏覽器會自動執(zhí)行此方法來結(jié)束程序,釋放所占資源。 9.1.3 JApplet類在Java的早期版本中,窗體、按鈕等組件被列入java.awt包中。隨著Java系統(tǒng)的不斷改進和功能的增強,在1998年推出JDK1.2版本時,javax.Swing包被列入Java2的基礎(chǔ)類庫JFC(Java Fundation Classes)中。Swing擴展了AWT組件集,定義了
9、相對于java.awt包的具有更多、更強功能的Swing GUI組件集。javax.Swing.JApplet是java.applet.Applet的子類,且具有如下繼承關(guān)系: java.lang.Object java.awt.Component java.awt.Container java.awt.Panel java.applet.Applet javax.swing.JApplet 9.1.4 Java 2D APIJava 2D API是Java用于開發(fā)二維圖形的API。在Java的AWT和Swing類庫中,提供了一些簡單的二維圖形處理功能。而Java 2D API則提供了強大靈活
10、且獨立于圖形設(shè)備的二維圖形處理功能,它是JFC的一個組成部分,它提供了處理二維圖形、圖像、文字等對象的統(tǒng)一機制和統(tǒng)一的圖形轉(zhuǎn)換機制。J2SDK提供的Java 2D API中的核心類和接口有:java.awt、java.awt.geom、java.awt.font、java.awt.color、java.awt.image、java.awt.image.renderable及java.awt.print。 Java 2D API在java.awt包中用于處理二維圖形的類和接口有:AlphaComposite、BasicStroke、Color、Composite、CompositeCotext、
11、Font、FontMetrics、GradientPaint、Graphics2D、GraphicsConfiguration、GraphicsEnvironment、Paint、PaintContext、Point、Polygon、Rectangle、Shape、Stroke、TexturePaint及Transparency等。 Java 2D API在java.awt.geom包中用于定義幾何形狀的類和接口有:Arc2D、Arc2D.Double、Arc2D.Float、Area、BasicTextUI.BasicCaret、CubicCurve2D、CubicCurve2D.Doubl
12、e、CubicCurve2D.Float、DefaultCaret、Ellipse2D、Ellipse2D.Double、Ellipse2D.Float、GeneralPath、Line2D、Line2D.Double、Line2D.Float、Polygon、QuadCurve2D、QuadCurve2D.Double、QuadCurve2D.Float、Rectangle、Rectangle2D、Rectangle2D.Double、Rectangle2D.Float、RectangularShape、RoundRectangle2D、RoundRectangle2D.Double及Rou
13、ndRectangle2D.Float。Java 2D API在其他一些包,如java.awt.font、java.awt.color、java.awt.image、java.awt.image.renderable及java.awt.print中的類和接口請查閱Java 2D API幫助文檔。 9.1.5 與圖形文字有關(guān)的類及其繼承關(guān)系圖9.1給出了java.awt包層次的一部分有關(guān)文字、顏色和基本圖形的類。圖中的每一個類都是從類Object直接派生出來的。其中,類Font是用于操作字體的;類Color是用于操作顏色的;類BasicStroke用于創(chuàng)建圖形形狀輪廓;類Graphics用于繪制
14、各種串、線、矩形、圓和其他幾何圖形;類Graphics2D則提供了繪制任意幾何形狀圖形的功能。 圖9.1 java.awt包中常用的圖形文字類(是由Object類派生的) 9.1.6 Java 2D API坐標系統(tǒng)應(yīng)用Java 2D API繪制文本與圖形時有兩種坐標系,一種是與設(shè)備無關(guān)的邏輯坐標系,也稱為用戶坐標系;另一種是與設(shè)備(例如顯示器、打印機等)有關(guān)的坐標系。Java 2D API具有自動轉(zhuǎn)換兩種坐標系的功能。在默認情況下,用戶坐標系的原點在繪圖表面的左上角,左上角坐標為(0,0),x坐標從左向右遞增,y坐標從上向下遞增。當文本與圖形在屏幕上輸出時,坐標單位以像素來度量。我們給出的所有
15、文本與圖形都是相對于用戶坐標系的。圖9.2中的點p表示在用戶坐標系中的位置。 圖9.2 Java用戶坐標系統(tǒng)9.1.7 三種圖形對象Graphics2D對象可以輸出以下三種圖形對象:(1) 形狀(shape)圖形對象。它是一些幾何圖形類型,如矩形、橢圓、直線和曲線,每種形狀對象實現(xiàn)Java.awt.Shape接口。(2) 文本(text)圖形對象。它可以按不同的字體、風格和顏色輸出。(3) 圖像(image)圖形對象。它是java.awt.image.BufferedImage類的對象。由于圖像(image)的內(nèi)容非常多,因此本章只講述基礎(chǔ)性形狀和文本兩類圖形對象的繪制,偶爾也會用到一些圖像的
16、知識。 9.1.8 Graphics2D對象的屬性設(shè)置Graphics2D對象通過其屬性來封裝繪圖用的狀態(tài)信息。因此,在繪制二維幾何圖形前,需要對圖形對象的屬性進行設(shè)置。Graphics2D對象提供了下面七個屬性的設(shè)置和獲得方法:(1) Paint屬性:用來對要繪制的圖形或文字的顏色進行設(shè)置。具體設(shè)置是通過它的成員方法setPaint()和getPaint()來實現(xiàn)的。例如,假設(shè)g2是Graphics2D對象,可以用g2.setPaint(Color.green)語句設(shè)置g2的paint屬性為綠色。(2) Stroke屬性:通過setStroke()方法來控制圖形輪廓線的形狀。例如,用g2.s
17、etStroke(new BasicStroke(4)語句設(shè)置Graphics2D對象g2的圖形輪廓線的寬度為4個像素。 (3) Front屬性:用于設(shè)置輸出文本的字體。(4) Transformation屬性:通過setTransform( )方法來實現(xiàn)圖形的縮放、旋轉(zhuǎn)和移位等。(5) Composite rule屬性:通過setComposite( )方法來描述繪圖操作如何與存在的背景相復合。(6) Clipping space屬性:通過setClip( )方法來設(shè)置剪切區(qū)域(clip area),即它將繪圖限制在一個設(shè)定的區(qū)域內(nèi),使繪圖操作在這個區(qū)域外無效。(7) Rendering h
18、ints屬性:通過setRenderingHints( )方法來控制繪圖的質(zhì)量和速度。 9.2 繪 制 文 字 9.2.1 繪制文字的成員方法由于字符串可以用字符串對象、字符數(shù)組、字節(jié)數(shù)組這三種不同形式表示,故Java在Graphics類中相應(yīng)地提供了三個成員方法來繪制這三種不同形式的字符串(見表9.1)。 表9.1 繪制字符和字符串的成員方法 表9.2 繪制字符的常用成員方法 【示例程序c9_1.java】 使用Graphics類的三個成員方法繪制“WELCOME TO XIAN”。import java.applet.*;import java.awt.*;import javax.swi
19、ng.*;public class c9_1 extends JApplet private String s = WELCOME!; private char c = T,O,a,e,t; private byte b = d,4,X,I,047,A,N;public void paint( Graphics g) /覆蓋Applet的成員方法 g.drawString( s, 50, 25); g.drawChars( c, 0, 2, 50, 50); g.drawBytes( b, 2, 5, 50, 75); 在這個程序中,為了學習使用繪制字符和字符串的三個成員方法,我們分別定義了一
20、個字符串對象s、一個字符數(shù)組c和一個字節(jié)數(shù)組b,分別用于保存三行文字內(nèi)容。最后,我們通過覆蓋JApplet類的paint( )方法,并在這個方法中引用繪制字符和字符串的成員方法實現(xiàn)了文字的繪制。該程序的運行結(jié)果見圖9.3。 圖9.3 程序c9_1的運行結(jié)果 【示例程序c9_2.java】 使用Graphics2D類的成員方法繪制“WELCOME TO XIAN”。import java.applet.*;import java.awt.*;import javax.swing.JApplet;public class c9_2 extends JApplet private String s
21、= WELCOME!; private char c = T,O,a,e,t; private byte b = d,4,X,I,047,A,N; public void paint(Graphics g) /為保證方法可以訪問繪圖環(huán)境的全部功能,把g強制轉(zhuǎn)換成Graphics2D Graphics2D g2=(Graphics2D)g; g2.drawString( s, 50, 25); g2.drawChars( c, 0, 2, 50, 50); /Graphics2D是Graphics的子類,可以繼承Graphics類的方法 g2.drawBytes( b, 2, 5, 50, 75
22、); 9.2.2 Font類 1. Font類的構(gòu)造方法Font類用來描述字體的名稱(Name)、大小(Size)和樣式(Style)。使用Font類的構(gòu)造方法創(chuàng)建一個Font類的對象,其格式如下:Font(String fontname,int style,int size)其中:fontname為字型名,如宋體、黑體、楷體、Arial、Courier、TimesRoman、Helvetica等;style為字體樣式,如粗體(BOLD)、斜體(ITALIC)、正常體(PLAIN);Size為用像素點表示的字體大小。 2. Font類的成員方法創(chuàng)建一個Font類對象后,就可以使用Font類提供
23、的成員方法來獲取字體、字型等方面的信息。Font類提供的常用成員方法如表9.3所示。 表9.3 java.awt.Font類方法 3. 設(shè)置字體可以用java.awt.Graphics類的成員方法來設(shè)置自己希望使用的字體,其格式如下:setFont(Font myFont); 4. 自定義字體繪制文字的步驟自定義字體繪制文字的步驟如下:(1) 創(chuàng)建Font類對象,指定字體名、字體樣式及字體大?。?2) 使用.setFont( )設(shè)置創(chuàng)建好的Font類對象;(3) 調(diào)用drawString( )方法繪制文字。 【示例程序c9_3.java】 使用不同的字體繪制文字。import java.app
24、let.*;import java.awt.*;import javax.swing.JApplet;public class c9_3 extends JApplet Font f1 = new Font(TimesRoman,Font.BOLD,16);/字體為TimesRoman,字體樣式加粗 Font f2 = new Font(Courir,Font.ITALIC,24); /字體為Courir,字體樣式傾斜 Font f3 = new Font(Helvetica,Font.PLAIN,14); /常規(guī) String hStr = Courir; public void paint
25、(Graphics g) Graphics2D g2=(Graphics2D)g; g2.setFont(f1); g2.drawString(TimesRoman,20,50); g2.setFont(f2); g2.drawString(hStr,20,100); g2.setFont(f3); g2.drawString(Helvetica,20,150); 圖94 程序c8_3的運行結(jié)果【示例程序c9_4.java】 獲取字體信息。import java.applet.Applet;import java.awt.Graphics;import java.awt.Font;public
26、 class c8_3 extends Applet Font f=new Font(Courier, Font.ITALIC+Font.BOLD,24); /字體樣式傾斜加粗 public void paint(Graphics g) Graphics2D g2=(Graphics2D)g; int style,size; String s,name; g2.setFont(f); style=f.getStyle(); /得到字體樣式 if (style =Font.PLAIN) s=Plain; else if (style =Font.BOLD) s=Bold; else if (st
27、yle =Font.ITALIC) s=Italic; else s=Bold italic; size=f.getSize(); /得到字體大小 s+=size+point; name=f.getName(); /得到字體名稱 s+=name; g2.drawString(s,10,50); 圖9.5 程序c9_4的運行結(jié)果9.3 Color 類9.3.1 Color類的構(gòu)造方法表9.4 java.awt.Color 類的構(gòu)造方法 不論使用哪個構(gòu)造方法來創(chuàng)建Color對象,都需要指定新建顏色中的R(紅)、G(綠)、B(藍)三色的比例。Java提供的這三個構(gòu)造方法用不同的方式確定RGB的比例,
28、可以使編程者從256256256(約16 000 000)種顏色中進行選擇。一個RGB值由三部分組成:第一個RGB部分定義紅色的量;第二個RGB部分定義綠色的量;第三個RGB部分定義藍色的量。RGB值中某一部分的值越大,那種特定顏色的量就越大。9.3.2 Color類數(shù)據(jù)成員常量 用戶除了可以使用構(gòu)造方法指定Color的RGB值外,Java還對一些常用的顏色提供了如表9.5所示的Color類數(shù)據(jù)成員常量。表9.5 Color類static數(shù)據(jù)成員常量和RGB值9.3.3 Color類的成員方法表9.6 Java.awt.Color類成員方法 此外,還可以用java.awt.Graphics2D
29、類的方法設(shè)定顏色或獲取顏色。這些方法及其功能如下: setBackground(Color c):設(shè)定背景顏色,c代表顏色。 getPaint ( ):獲取當前所使用的顏色。 setPaint( new Color(int r,int g,int b):設(shè)定前景顏色的另一個方法。 setPaint(Color c):設(shè)定前景顏色,c代表顏色。 setColor(new Color(int r,int g,int b):設(shè)定前景顏色的另一個方法,c代表顏色。 9.3.4 應(yīng)用舉例【示例程序c9_5.java】 設(shè)置字符顏色。import java.applet.*;import java.awt
30、.*;import javax.swing.JApplet;public class c9_5 extends JApplet public void paint(Graphics g) Graphics2D g2=(Graphics2D)g; int red,green,blue; red =255; blue =255; green =0; g2.setPaint( new Color( red,green,blue); /設(shè)置前景顏色 setBackground(Color.cyan); /設(shè)置背景顏色 g2.drawString(Welcome to Xi047an, 25,75);
31、showStatus(Current RGB: + g2.getPaint().toString(); /狀態(tài)行顯示繪圖文字顏色信息 圖9.6 程序c9_5的運行結(jié)果 9.4 繪制形狀圖形 9.4.1 繪制幾何圖形的方法與步驟java.awt.geom包中定義了許多實現(xiàn)幾何圖形的類,這些類可以創(chuàng)建幾何圖形對象,然后通過Graphics2D類的對象可以顯示這些幾何圖形。有兩種繪制幾何圖形的方法:一種是使用draw( )方法繪制圖形輪廓;另一種是使用fill( )方法繪制內(nèi)部填充的幾何圖形。 輪廓幾何圖形的繪制步驟如下:(1) 創(chuàng)建一個Graphics2D類的對象;(2) 創(chuàng)建一個幾何形狀類geo
32、m的對象shape;(3) 按要求設(shè)置Graphics2D的屬性;(4) 調(diào)用Graphics2D類的對象的draw(shape)方法繪制幾何圖形。繪制內(nèi)部填充的幾何圖形也可分為4步,其中前3步與輪廓幾何圖形的繪制步驟相同,只是在第4步中調(diào)用的是Graphics2D類的對象的fill(shape)方法。 9.4.2 繪制線段與矩形線段與矩形是最常用的幾何圖形之一,Java2D API中提供了繪制直線、二次曲線、三次曲線、平面矩形、圓角矩形等圖形的構(gòu)造方法,如表9.7所示。在這些方法中,繪制圓角矩形除了要指定矩形區(qū)域外,還需要指明圓角的弧寬(arcw)和弧高(arch)。 表9.7 繪制線段與矩
33、形用到的構(gòu)造方法 【示例程序c9_6.java】 在窗體上繪制直線、二次曲線及三次曲線。 import java.applet.*; import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*; class drawPanel extends JPanel public void paint(Graphics g) Graphics2D g2=(Graphics2D)g; Line2D.Double Line1=new Line2D.Double(20.0,20.0,80.0,
34、40.0); QuadCurve2D.Double Line2=new QuadCurve2D.Double(130.0,30.0,150.0,50.0,170.0,20.0); CubicCurve2D.Double Line3=new CubicCurve2D.Double(220.0,40.0,240.0,60.0,260.0,20.0,300.0,35.0); g2.setPaint(Color.red); /設(shè)置前景顏色 g2.draw(Line1); g2.draw(Line2); g2.draw(Line3); public class c9_6 public c9_6( ) J
35、Frame.setDefaultLookAndFeelDecorated(true); /設(shè)置窗體圖標顯示為默認方式 JFrame f=new JFrame(draw Line); /創(chuàng)建窗體對象 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /點擊窗口關(guān)閉圖標關(guān)閉窗口 drawPanel pa=new drawPanel( ); /創(chuàng)建容器JPanel類的對象 pa.setPreferredSize(new Dimension(350, 100); /設(shè)置JPanel類對象的大小 Container cp=f.getContentPane
36、( ); /創(chuàng)建JFrame的容器對象 pa.setBackground(Color.cyan); /設(shè)置pa對象的背景顏色 /cp容器的布局為BorderLayout,添加pa到cp容器中并居中 cp.add(pa,BorderLayout.CENTER); f.pack( ); /調(diào)整窗口 f.setVisible(true); /設(shè)置窗口為可見 public static void main(String args) new c9_6( ); 圖9.7 程序c9_6的運行結(jié)果 【示例程序c9_7.java】 繪制各種矩形。import java.applet.*;import java.
37、awt.*;import java.awt.event.*;import java.awt.geom.*;import javax.swing.*;public class c9_7 extends JApplet public void paint(Graphics g) Graphics2D g2=(Graphics2D)g; g2.setPaint(Color.red); /設(shè)置前景顏色 / draw Rectangle2D.Double Rectangle2D.Double rec=new Rectangle2D.Double(20,20,60,30); /創(chuàng)建矩形對象 g2.draw
38、(rec); g2.drawString(Rectangle2D,20,70); / draw RoundRectangle2D.Double g2.setStroke(new BasicStroke(4); /設(shè)置線寬 g2.draw(new RoundRectangle2D.Double(100,20,60,30,10,10); /創(chuàng)建圓角矩形對象并畫出 g2.drawString(RoundRectangle2D,100,70); g2.setPaint(Color.blue); /設(shè)置前景顏色 / fill Rectangle2D.Double Rectangle2D.Double r
39、ec1=new Rectangle2D.Double(20,80,60,30); g2.fill(rec1); g2.drawString(Rectangle2D,20,120); / fill RoundRectangle2D.Double g2.setStroke(new BasicStroke(4); /設(shè)置線寬 RoundRectangle2D.Double rorec=new RoundRectangle2D.Double(100,80,60,30,10,10); g2.fill(rorec); g2.drawString(RoundRectangle2D,100,120); 該程序
40、的運行結(jié)果如圖9.8所示。 圖9.8 程序c9_7的運行結(jié)果 9.4.3 繪制橢圓、圓及弧在Java2D API中,繪制一個橢圓就是使用橢圓類的構(gòu)造方法來創(chuàng)建一個橢圓對象。橢圓類的構(gòu)造方法是:Ellipse2D.Float(float x, float y, float w, float h)這個構(gòu)造方法中有4個參數(shù),分別是橢圓外切矩形的左上角頂點坐標x,y;橢圓的寬度w和高度h(當然也是外切矩形的寬度和高度)。這些參數(shù)的數(shù)據(jù)類型可以是float型或double型。顯然,當橢圓的寬度w和高度h相等時,就是一個圓。因此,使用繪制橢圓的構(gòu)造方法即可繪制圓。 畫弧可看成是畫部分橢圓。繪制一個弧的構(gòu)造
41、方法如下:Arc2D.Float(float x, float y, float w, float h, float start,float extent, int type)這個構(gòu)造方法中有7個參數(shù),其中:前4個參數(shù)x、y、w、h的含義與橢圓中參數(shù)的意義相同,另外3個參數(shù)中的start為起始角度,extent為弧角度,type為弧的連接類型。弧角度extent用度數(shù)來衡量,表明一段弧在兩個角度之間繪制,即表示從起始角度轉(zhuǎn)多少角度畫弧,extent為正,表示逆時針畫弧,extent為負,表示順時針畫弧?;〉倪B接類型有OPEN、CHORD、PIE三種,OPEN表示弧兩端點無連接(弧),CHORD
42、表示弧的兩端點用直線連接(弦),PIE表示弧兩端連接成扇形。 表9.8 創(chuàng)建橢圓及弧類對象的構(gòu)造方法 下面我們通過一些實例來說明怎樣來繪制這些圖形?!臼纠绦騝9_8.java】 繪制橢圓、圓及扇形。import java.applet.*;import java.awt.*;import java.awt.geom.*;import javax.swing.*;public class c9_8 extends Japplet public void paint(Graphics g) Graphics2D g2=(Graphics2D)g; g2.setPaint(Color.red);
43、/設(shè)置前景顏色 g2.setStroke(new BasicStroke(2); /設(shè)置線寬 /繪制弧 g2.draw(new Arc2D.Double(15,15,80,80,60,125,Arc2D.OPEN); g2.draw(new Arc2D.Double(100,15,80,80,60,125,Arc2D.CHORD); g2.draw(new Arc2D.Double(200,15,80,80,60,125,Arc2D.PIE); g2.fill(new Arc2D.Double(280,15,80,80,60,125,Arc2D.OPEN); g2.drawString(Arc
44、2D,100,90); /繪制圓及橢圓 g2.drawString(Ellipse2D,100,220); g2.setPaint(Color.lightGray); Ellipse2D.Double e1=new Ellipse2D.Double(15,120,100,50); Ellipse2D.Double e2=new Ellipse2D.Double(150,120,80,80); g2.fill(e2); g2.setPaint(Color.black); g2.setStroke(new BasicStroke(6); g2.drawString(Ellipse2D,100,22
45、0); g2.draw(e1); g2.draw(e2); 該程序的運行結(jié)果如圖9.9所示。 圖9.9 程序c9_8的運行結(jié)果 9.4.4 繪制多邊形 多邊形是由一系列首尾相接的直線組成的。在Java2D API中繪制多邊形的步驟如下: (1) 創(chuàng)建多邊形的x坐標數(shù)組與y坐標數(shù)組; (2) 創(chuàng)建GeneralPath類的幾何圖形的路徑對象; (3) 調(diào)用路徑對象的成員方法moveTo( ),將準備抬筆移動的點(彼此間無連線的點)的坐標添加到路徑對象中; (4) 調(diào)用路徑對象的成員方法lineTo( ),將準備從當前位置畫直線的點的坐標添加到路徑對象中;(5) 若要畫封閉多邊形,則應(yīng)調(diào)用路徑對象
46、的成員方法closePath( )來進行這一設(shè)置;(6) 調(diào)用Graphics2D的對象的成員方法draw( )或fill( )畫多邊形。 【示例程序c9_9.java】 繪制多邊形。import java.applet.*;import java.awt.*;import java.awt.geom.*;import javax.swing.*;public class c9_9 extends JApplet public void paint(Graphics g) Graphics2D g2 =(Graphics2D)g; g2.setPaint(Color.red); / setBa
47、ckground(Color.green); int x1 =20,40,50,30,20,15,20; /建立第一個多邊形的x 坐標數(shù)據(jù)int y1 =20,20,30,50,50,30,20; /建立第一個多邊形的y坐標數(shù)據(jù)int x2 =90,110,100,80,70,65,60,70; /建立第二個多邊形的x 坐標數(shù)據(jù)int y2 =90,110,80,100,100,80,60,70; /建立第二個多邊形的y坐標數(shù)據(jù) int x3 =190,218,150,230,162; /建立第三個多邊形的x 坐標數(shù)據(jù) int y3 =20,100,46,46,100; /建立第三個多邊形的y
48、 坐標數(shù)據(jù) GeneralPath polygon = new GeneralPath(0,x1.length+x2.length); /創(chuàng)建幾何圖形的路徑對象 polygon.moveTo(x10, y10); /將準備抬筆移動的點的坐標添加到對象polygon中for ( int index = 1; index x1.length ; index+ ) /將準備從當前位置畫直線的點的坐標添加到對象polygon中 polygon.lineTo(x1index, y1index); polygon.moveTo(x20, y20); for ( int index = 1; index x
49、2.length ; index+ ) polygon.lineTo(x2index, y2index); polygon.closePath( ); /設(shè)置從筆的當前位置畫直線到最后一次抬筆的位置 g2.draw(polygon); /畫多邊形 /畫五角星 GeneralPath polygon2 = new GeneralPath(0,x3.length); polygon2.moveTo(x30, y30); for ( int index = 1; index x3.length ; index+ ) polygon2.lineTo(x3index, y3index); g2.fill
50、(polygon2); 該程序的運行結(jié)果如圖9.10所示。 圖9.10 程序c9_9的運行結(jié)果 在該程序中給出了創(chuàng)建路徑對象的語句,它可以由直線、二次、三次曲線形成幾何路徑。創(chuàng)建該對象的構(gòu)造方法是: GeneralPath(intrule, intinitialCapacity) 其中:rule為環(huán)繞規(guī)則,可以是WIND_EVEN_ODD或 WIND_NON_ZERO;initialCapacity為坐標點總個數(shù)。 9.4.5 圖形重疊時的色彩設(shè)置當繪制的圖形對象與已有的圖形對象重疊時,圖形的重疊部分需要確定如何將新畫圖形對象(Source)的顏色與已有的圖形對象(Destination)的顏
51、色相復合。Java 2D提供的Composite和CompositeContext 兩種接口構(gòu)成了圖形對象間顏色復合模式的基礎(chǔ)。其中,實現(xiàn)Composite接口的類是AlphaComposite。 繪制重疊圖形對象的一般步驟是:首先創(chuàng)建AlphaComposite 類的對象(如本例中的ac),并用類的getInstance( )方法來獲取一種特定的顏色混合規(guī)則和透明度這兩個參數(shù);第二步是調(diào)用setComposite( )方法將由getInstance( )方法獲得的顏色復合模式指定給特定的圖形對象;最后是使用fill( )方法來繪制重疊圖形。遵循這樣幾個步驟,可以使重疊圖形對象的顏色具有復合效
52、果,制作出多彩的圖形。顏色混合規(guī)則是通過使用系統(tǒng)提供的下述屬性常量:CLEAR、DEST_IN、DEST_OUT、DEST_OVER、SRC、SRC_IN、SRC_OUT和SRC_OVER中的某一個來實現(xiàn)的。這些屬性常量的作用(在沒有指定透明度的情況下)如圖9.11所示。 圖9.11 畫重疊圖形對象的重疊模式 下面通過一個具體的實例來說明。【示例程序c9_10.java】 繪制復合圖形。import java.applet.*;import java.awt.*;import java.awt.geom.*;import javax.swing.*;public class c9_10 ext
53、ends JApplet public void paint(Graphics g) Rectangle2D.Double rec1=new Rectangle2D.Double(0,0,100,100), rec2=new Rectangle2D.Double(50,0,100,100), rec3=new Rectangle2D.Double(125,75,100,100), rec4=new Rectangle2D.Double(50,125,100,100), rec5=new Rectangle2D.Double(-25,75,100,100); Graphics2D g2=(Gra
54、phics2D)g; g2.setPaint(Color.red); /將用戶坐標系的原點(0,0)平移到屏幕坐標系x為100,y為50像素點的位置g2.translate(100,50); / radians=degree * pie / 180 g2.rotate(45*java.lang.Math.PI)/180); /將圖形旋轉(zhuǎn)45g2.fill(rec1); /畫左上角坐標為(0,0),長與寬為100的填充矩形 /創(chuàng)建仿射變換對象,設(shè)置幾何圖形變換為默認方式g2.setTransform(new AffineTransform( ); /創(chuàng)建一個AlphaCcomposite類的復合
55、對象ac,規(guī)則為50%的透明度AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.5f); g2.setComposite(ac); /設(shè)定重疊對象的顏色復合方式 g2.setPaint(Color.green); g2.fill(rec2); g2.setPaint(Color.blue); g2.fill(rec3); g2.setPaint(Color.yellow); g2.fill(rec4); g2.setPaint(Color.pink); g2.fill(rec5); 該程序的運行結(jié)果
56、如圖9.12所示。 圖9.12 程序c9_10的運行結(jié)果 9.4.6 繪制剪切文字圖形 Java 2D API中提供了文字圖形的剪切功能,該功能通過在圖形環(huán)境中設(shè)置一個剪切形狀,來將所有的繪圖操作限制在該剪切形狀的內(nèi)部進行。剪切文字圖形的操作步驟如下(1) 創(chuàng)建文字字符串對象;(2) 用FontRenderContext類創(chuàng)建字體繪制環(huán)境對象;(3) 用TextLayout類創(chuàng)建文本布局對象;(4) 用GeneralPath類創(chuàng)建文本圖形的路徑對象;(5) 對用戶坐標系進行平移變換; (6) 創(chuàng)建圖形對象,該對象是通過調(diào)用文本布局對象的getOutline()成員方法得到的圖形輪廓;(7) 用
57、路徑對象的append( )成員方法,添加圖形對象到路徑對象中;(8) 用Graphics2D類對象的成員方法draw( )畫文字圖形,并用Graphics2D類對象的成員方法clip( )剪切文字圖形。(9) 設(shè)置剪切的形狀,繪制一組線條。 【示例程序c9_11.java】 繪制剪切文字圖形。import java.awt.event.*;import java.awt.font.*;import java.awt.geom.*;import javax.swing.*;import java.awt.*; public class c9_11 extends JApplet private Shape clipShape; public void paint(Graphics g) Graphics2D g2 = (Graphics2D)g; clipShape = makeClipShape(g2); g2.draw(clipShape); g2.clip(clipShape); /
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年超低頻傳感器標定系統(tǒng)合作協(xié)議書
- 八年級上冊第一章復習導學案
- 新華東師大版七年級數(shù)學下冊《10章-軸對稱、平移與旋轉(zhuǎn)-10.5-圖形的全等》教案-162
- 2025年代理合同解除協(xié)議常用版(2篇)
- 2025年代合同標準樣本(2篇)
- 2025年五年級作文工作總結(jié)范例(二篇)
- 2025年五星級酒店保潔勞務(wù)合同協(xié)議(2篇)
- 2025年二年級老師個人教學工作總結(jié)模版(四篇)
- 熱點1-1 集合與復數(shù)(8題型+滿分技巧+限時檢測)(解析版)
- 2025年產(chǎn)品買賣協(xié)議燈具(2篇)
- SL 288-2014 水利工程施工監(jiān)理規(guī)范
- 部編版八年級語文上冊期末考試卷
- 2024年02月中央軍委后勤保障部2024年公開招考專業(yè)技能崗位文職人員筆試參考題庫附帶答案詳解
- (2024年)肺栓塞的護理課件
- 小學數(shù)學三年級下冊第八單元《數(shù)學廣角-搭配(二)》大單元集體備課整體設(shè)計
- (高清版)TDT 1031.6-2011 土地復墾方案編制規(guī)程 第6部分:建設(shè)項目
- 2024年江蘇省高中學業(yè)水平測試生物試卷
- 露天采場危險有害因素辨識
- 蘇教版一年級上、下冊勞動與技術(shù)教案
- 七上-動點、動角問題12道好題-解析
- 山東曲阜的孔廟之旅
評論
0/150
提交評論