第 6 章 Java圖形與事件處理_第1頁
第 6 章 Java圖形與事件處理_第2頁
第 6 章 Java圖形與事件處理_第3頁
第 6 章 Java圖形與事件處理_第4頁
第 6 章 Java圖形與事件處理_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第6章

Java圖形與事件處理

本章主要內(nèi)容:6.1圖形與圖形的描繪6.1.1圖形繪制特點及繪圖工具paint()6.1.2Graphics類6.1.3Java2D6.1.4畫布Canvas6.2事件處理機制6.2.1事件處理機制6.2.2事件類6.2.3鼠標事件6.2.4事件適配器6.2.5鍵盤事件6.2.6焦點事件6.1圖形與圖形的描繪6.1.1圖形繪制特點及繪圖工具paint()1、圖形繪制特點在一個二維的Java圖形界面坐標系中,該坐標的原點在組件的左上角,坐標的單位是像素。X軸在水平方向從左至右,Y軸在垂直方向從上向下,如圖所示。6.1.1圖形繪制特點及繪圖工具paint()2、繪圖工具paint()方法

任何一個圖形對象(java.awt.Component的子類)使用paint()方法為繪圖工具就可以畫出線條、矩形、圓形等各種圖形來。該方法為:

publicvoidpaint(Graohicsg);這里,參數(shù)java.awt.Grephics類為繪圖對象,繪圖工具paint()通過Grephics對象繪制具體的圖形。paint()方法在程序執(zhí)行后會被自行調(diào)用。而在程序中需要執(zhí)行paint()方法,一般是調(diào)用repaint()方法,以清除舊圖,重新繪制新圖,該方法稱為重繪。6.1.2Graphics類Graphics類是繪圖對象,它是一個抽象類,不能直接創(chuàng)建Graphics對象。1、繪圖方法Graphics類包含了大量的繪圖方法,常用的繪圖方法見教材表6.1?!纠?-1】繪制直線、矩形和圓的簡單圖形。

publicvoidpaint(Graphicsg){g.drawLine(50,50,120,120);g.drawRect(50,50,70,70);g.drawOval(70,70,90,90);}使用Graphics對象繪制各種圖形程序中沒有顯式調(diào)用paint()方法,它在main()方法中被自行調(diào)用【例6-2】繪制一個多邊形圖形。核心語句:publicvoidpaint(Graphicsg){ intx[]={80,190,150,50}; inty[]={80,30,170,210}; intpts=x.length; g.drawPolygon(x,y,pts);}6.1.2Graphics類2、設置顏色(1)顏色

顏色RGB紅25500藍02550綠00255黃2552550紫2550255青0255255白255255255黑000灰1281281286.1.2Graphics類(2)Color類使用Graphics類設置顏色,首先要創(chuàng)建顏色類Color的對象,創(chuàng)建顏色對象的構(gòu)造方法為:

publicColor(intr,intg,intb);其中,整型參數(shù)r、g、b的取值范圍為0~255,分別代表紅、綠、藍三基色。6.1.2Graphics類也可以使用Color類的靜態(tài)常量作顏色對象的參數(shù),這時,創(chuàng)建顏色對象的構(gòu)造方法為:

publicColor(Color.顏色靜態(tài)常量);其顏色靜態(tài)常量取值為red(紅色)、blue(藍色)、green(綠色)、orange(橙色)、cyan(青綠色)、yellow(黃色)、pink(粉紅色)、white(白色)、black(黑色)等。6.1.2Graphics類Graphics類可以使用表6.3所示的get/set方法控制繪圖的色彩和使用不同字體。getColor()獲得當前圖形的色彩setColor(Colorc)設置當前圖形的色彩,參數(shù)Color為顏色類getFont()獲得當前字體setFont(Fontfont)設置當前字體,參數(shù)Font為字體類getClip()獲取當前的剪貼板內(nèi)容。setClip(int,int,int,int)將指定的矩形設置為當前的剪貼區(qū)?!纠?-3】繪制用色彩填充的笑臉圖形。核心語句:15publicvoidpaint(Graphicsg)16{17g.setColor(Color.yellow);28g.fillOval(35,30,210,210);19g.setColor(Color.black);20g.fillArc(70,70,150,150,180,180);21g.setColor(Color.yellow);22g.fillArc(70,75,150,130,180,180);23g.setColor(Color.black);24g.fillOval(80,100,30,30);25g.fillOval(180,100,30,30);26}6.1.2Graphics類3、設置字體其中name為邏輯字體名,style(風格)是Font.PLAIN(正常字體)、Font.BOLD(黑體)或Font.ITALIC(斜體)的組合,size是字號大小,字號越大字體越大。我們可以用Graphics類的setFont(Fontf)方法來設置字體。

Fontf=newFont(Stringname,intstyle,intsize);【例6-4】編寫程序以創(chuàng)建不同的風格和大小的可利用的邏輯字體。6.1.3Java2D1、控制線條的粗細首先使用Line2D類創(chuàng)建直線對象:Line2Dline=newLine2D.Double(50,50,120,50);

再使用BasicStroke類創(chuàng)建一個供畫筆paint()方法選擇線條粗細的對象。

publicBasicStroke(float

width,int

cap,int

join);width-畫筆線條粗細cap–線條兩端的形狀

join–線條中角的處理

graphics類還有一些不足,例如缺少改變線條粗細的方法,也缺少填充一個對象的方法。Graphics2D可以解決這些問題。

【例6-5】設置線條粗細Graphics2D對象通過調(diào)用setStroke(BasicStrokea)方法來設置線條形狀,并用draw()方法繪制出線條。6.1.3Java2D2、填充圖形

Graphics2D對象調(diào)用fill()方法用顏色填充圖形。Graphics2D對象還可以通過GradientPaint類定義一個顏色對象,實現(xiàn)漸變顏色填充圖形。GradientPaint類的構(gòu)造方法為:GradientPaint(float

x1,float

y1,Color

color1,float

x2,float

y2,Color

color2,boolean

cyclic);【例6-6】用漸變顏色填充圖形。6.1.4畫布Canvas

畫布Canvas類是一個用來繪制圖形的矩形組件,在畫布中可以響應鼠標和鍵盤事件。

6.1.4畫布Canvas1、創(chuàng)建畫布對象

Canvas的構(gòu)造方法沒參數(shù),所以使用簡單的語句就可以創(chuàng)建一個畫布對象:

Canvasmycanvas=newCanvas();在創(chuàng)建了Canvas對象后,一定要調(diào)用setSize()方法確定這個畫布的大小。2、常用方法paint(Graphicsg);update(Graphicsg);repaint();【例6-7】通過一個窗體的文本框輸入多邊形的邊數(shù),隨機產(chǎn)生多邊形各折線的坐標位置,在畫布上繪制出一個多邊形。

【例6-8】設計一個在窗體中可上下左右移動的小方塊的程序。本程序的設計思想和【例6-7】類似,程序由二個類組成:窗體主類(表現(xiàn)層)負責控制,確定所有組件的位置,處理用戶對方塊的操作。畫布MoveCanvas類(邏輯層)負責繪圖,其方法moveUp(),moveDown(),moveLeft(),moveRight()分別響應窗體主類actionPerformed()方法的對應的按鈕事件,再調(diào)用repaint方法來刷新圖像。

6.2事件處理在事件處理的過程中,主要涉及三類對象,它們分別是:(1)Event事件:實現(xiàn)用戶對圖形界面組件的操作,用Java語言描述并以類的形式出現(xiàn),例如鍵盤操作對應的事件類是KeyEvent。(2)EventSource事件源:事件發(fā)生的場所,通常就是各個組件,例如按鈕Button。(3)Eventhandler事件處理者:接收所發(fā)生的事件并對其進行處理的對象,也稱為監(jiān)聽器。6.2.1事件處理機制6.2.1事件處理機制授權(quán)處理機制6.2.1事件處理機制授權(quán)處理模式的結(jié)構(gòu):使用授權(quán)處理模式進行事件處理的一般方法如下:(1)對于某種類型的事件XXXEvent,要想接收并處理這類事件,必須定義相應的事件監(jiān)聽器類,該類需要實現(xiàn)與該事件相對應的接口XXXListener;(2)事件源實例化以后,必須進行授權(quán),注冊該類事件的監(jiān)聽器,使用addXXXListener(XXXListener)方法來注冊監(jiān)聽器。6.2.2事件類1、低級事件與高級事件低級事件:KeyEvent(鍵盤事件:鍵按下、釋放);MouseEvent(鼠標事件:鼠標單擊,移動)。高級事件:ActionEvent(動作事件:按鈕按下,TextField中按Enter鍵等)2、事件監(jiān)聽器

每類事件都有對應的事件監(jiān)聽接口,如:MouseEvent-->MouseListener,KeyEvent-->KeyListener等。6.2.2事件類3、事件類別及監(jiān)聽器接口

(見教材P175)事件類別描述信息接口名事件處理方法ActionEvent激活組件

ActionListeneractionPerformed(ActionEvent)

ItemEvent選擇項目

ItemListeneritemStateChanged(ItemEvent)

MouseEvent鼠標移動

MouseMotionListener

mouseDragged(MouseEvent)

mouseMoved(MouseEvent)鼠標點擊等

MouseListener

mousePressed(MouseEvent)

mouseReleased(MouseEvent)

mouseEntered(MouseEvent)

mouseExited(MouseEvent)

mouseClicked(MouseEvent)6.2.3鼠標事件與鼠標的事件有關(guān)可以分為兩類:(1)主要針對鼠標的坐標位置進行檢測,使用MouseListener接口;(2)主要針對鼠標的拖曳狀態(tài)進行檢測,使用MouseMotinListener接口?!纠?-9】事件處理示例。(見教材P176)6.2.4事件適配器1、事件適配器(EventAdapter)

java.awt.event包中定義的事件適配器類包括以下幾個:(1)

ComponentAdapter(接收組件事件適配器)(2)

ContainerAdapter(接收容器事件適配器)(3)

FocusAdapter(接收焦點事件適配器)(4)

KeyAdapter(接收鍵盤事件適配器)(5)

MouseAdapter(接收鼠標事件適配器)(6)

MouseMotionAdapter(接收鼠標運動事件適配器)(7)

WindowAdapter(接收窗口事件適配器)6.2.4事件適配器2、用內(nèi)部類實現(xiàn)事件處理內(nèi)部類(innerclass)是被定義于另一個類中的類,使用內(nèi)部類的主要原因是由于:(1)一個內(nèi)部類的對象可訪問外部類的成員方法和變量,包括私有的成員。(2)實現(xiàn)事件監(jiān)聽器時,采用內(nèi)部類、匿名類編程非常容易實現(xiàn)其功能。(3)編寫事件驅(qū)動程序,內(nèi)部類很方便?!纠?-10】使用事件適配器及內(nèi)部類設計記錄鼠標位置的程序。6.2.4事件適配器3、用匿名類實現(xiàn)事件處理

當一個內(nèi)部類的類聲明只是在創(chuàng)建此類對象時用了一次,而且要產(chǎn)生的新類需繼承于一個已有的父類或?qū)崿F(xiàn)一個接口,才能考慮用匿名類,由于匿名類本身無名,因此它也就不存在構(gòu)造方法,它需要顯式地調(diào)用一個無參數(shù)的父類的構(gòu)造方法,并且重寫父類的方法。所謂的匿名就是該類連名字都沒有,只是顯式地調(diào)用一個無參的父類的構(gòu)造方法?!纠?-11】使用匿名類設計記錄鼠標位置的程序。6.2.5鍵盤事件在Java中,當用戶使用鍵盤進行操作時,就會產(chǎn)生KeyEvent事件。監(jiān)聽器要完成對事件的響應,就要實現(xiàn)KeyListener接口,或者是

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論