JAVA講義第四講下_第1頁
JAVA講義第四講下_第2頁
JAVA講義第四講下_第3頁
JAVA講義第四講下_第4頁
JAVA講義第四講下_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第四章圖形編程4.1AWT與Swing簡介一.AWT工具包java的抽象窗口工具包(AWT:AbstractwindowInterface)包含在java.awt包中,它提供了許多用來設(shè)計GUI的組件類和容器類基本AWT庫處理用戶界面元素的方法是把這些元素的創(chuàng)建和行為委托給每個目標平臺上的本地GUI工具箱進行處理AWT的層次關(guān)系EventComponentGraphicsMenuComponButtonScrollBarContainerCanvasListCheckBoxLabelTextFieldTextAreaWindowFrameDialogFontAppletPanel二.JavaSwingSwing:非基于對等體的GUI工具箱Swing具有更豐富并且更方便的用戶界面元素集合Swing對底層平臺的依賴更少Swing會帶來交叉平臺上的統(tǒng)一視覺體驗Swing類被放在javax.Swing包上Swing組件層次關(guān)系ComponemtContainerWindowFrameDialogJFrameJDialogJComponentJPanelJLabelJScrollerJMenuBarJButtonJtext..三.AWT與Swing的關(guān)系對于使用過Java早期版本的人來說,大部分AWT組件都有其Swing等價物后者的名字一般是在前面添加一個字母“J”,如:JButton,JFrame,JPanel等4.2組件和容器一.組件Java把由Component類的子類或間接子類創(chuàng)建的對象稱為一個組件例:Buttonbutton1=newButton();例:TextFieldtextfield=newTextField();例:Labellabel=newLabel();二.容器Java把由container類的子類或間接子類創(chuàng)建的對象稱為一個容器例:Framefra=newFrame(“這是一個窗口”);Applet是Panel的子類,是Container的間接子類Applet本身也是一個容器三.添加組件Component類提供了一個方法:add();例:fra.add(button);例:fra.add(TextField);容器本身也可以看作是一個組件,因此可以把一個容器添加到另一個容器里,實現(xiàn)容器嵌套例:add(fra);四。布局管理器Java采用非常優(yōu)秀的概念來進行布局一個容器內(nèi)的所有組件都由一個布局管理器來進行管理Java支持以下四種布局管理器FlowLayoutBorderLayoutCardLayoutGridBagLayout五.常用容器1.框架在Java中,頂層窗口(沒有包含在另一個窗口內(nèi)的窗口)稱為框架AWT庫中有一個基于對等體的Frame類對應(yīng)著頂層該類的Swing版本為JFrame,JFrame是Frame子類例:框架是容器的例子SimpleFrameTest.java

importjavax.swing.*;publicclassSimpleFrameTest{publicstaticvoidmain(String[]args){

SimpleFramemyframe=newSimpleFrame();myframe.setDefaultCloseOperation(

JFrame.EXIT_ON_CLOSE);myframe.show();

}}classSimpleFrameextendsJFrame{publicSimpleFrame(){setSize(WIDTH,HEIGHT);}publicstaticfinalintWIDTH=300;publicstaticfinalintHEIGHT=200;}2.定義相對框架通過調(diào)用toolkit來得到系統(tǒng)相關(guān)信息例:獲得屏幕尺寸Toolkitkit=Toolkit.getDefaultToolkit();DimensionscreenSize=kit.getScreenSize();intscreenHeight=screenSize.height;intscreenWidth=screenSize.width;例:CenteredFrameTest.java3.常見類及方法APIjava.awt.ComponentbooleanisVisible()檢查組件是否可見voidsetVisible(booleanb)設(shè)置組件可見voidsetBounds(intx,inty,intwidth,intheight)移動并縮放組件DimensiongetSize()得到組件的大小voidsetSize(intwidth,intheight)voidsetSize(Dimensiond)把組件縮放到指定調(diào)度和寬度

java.awt.windowvoidtoFrond()放在其它窗口前面voidtoBack()放在其它窗口后面java.awt.FramevoidsetResizable(booleanb)縮放框架voidsetTitle(Strings)設(shè)置標題voidsetIconImage(Imageimage)將Image用作圖標java.awt.Toolkit

DimensiongetScreenSize()得到用戶屏幕大小六.顯示信息前面的例子中,信息都顯示在控制臺窗口,現(xiàn)在我們試著把信息顯示到JFrame中JFrame的結(jié)構(gòu)有點復(fù)雜,它由:根窗格、布局窗格、透明窗格和內(nèi)容窗格在AWT中可調(diào)用add()把組件直接添加到AWTFrame中,但在Swing中組件只能添加到內(nèi)容窗格里內(nèi)容窗格是用來添加組件的,獲得內(nèi)容窗格的代碼如下:

Containercp=getContentPane();Componentc=…;cp.add(c);用戶也可以創(chuàng)建一個畫板,然后在畫板上進行繪制時,最后將畫板添加到內(nèi)容窗格里,此時需要重載paintComponent()paintComponent(Graphicsg)是定義在JComponent中,每當該方法被調(diào)用時,系統(tǒng)就自動產(chǎn)生一個Graphics類型的參數(shù),傳遞給paintComponent方法中的參數(shù)gGraphics類提供繪制圖像和輸出文本的方法創(chuàng)建一個畫板classMyPanelextendsJPanel{publicvoidpaintComponent(Graphicsg){

super.paintComponent(Graphicsg)

g.drawString(“Hello!world”)….}}MyPanel擴展了JPanel,但面板的背景顏色等工作要由Jpanel來完成,super.paintComponent確保父類也參預(yù)繪制只要窗口重新繪制,paintComponent()就被自動調(diào)用(在AWT中上paint())例.在畫板上輸出信息NotHelloWorld.java常用APIjavax.swing.JFrameContainergetContentPane()返回JFrame的內(nèi)容窗格java.awt.Componentvoidrepain()重新繪制組件voidrepaint(intx,inty,intwidth,intheight)重新繪制組件的一部分javax.swing.JcomponentvoidpaintComponent(Graphicsg)需要重寫該方法來說明你的組件應(yīng)如何繪制4.3圖形編程一.2D圖形1.2D對象隨著SDK2.0版的到來,J2SE了包含一個Java2D庫,該庫實現(xiàn)了一個非常強大的圖形操作集如何獲得Graphics2D類對象該類是Graphics類的子類,通??捎肎raphics對象轉(zhuǎn)換而來.例:publicvoidpaintComponent(Graphicsg){graphics2Dg2=(graphics2D)g;…..}2.坐標JDK1.0版中使用整數(shù)像素坐標系java2D形體使用浮點數(shù)坐標系,這樣可為坐標指定單位。存在的問題:Retangle2Dr=……….;floatf=r.getWidth();/*Error*/getWidth()返回double值,應(yīng)進行轉(zhuǎn)換:floatf=(float)r.getWidth();因此,2D庫的形體類有兩種版本:Retangle2D.FloatRetangle2D.Double例:DrwaTest.java3.常用APIjava.awt.geom.Retangle2D.DoubleRetangle2D.Float(floatx,floaty,floatwidth,floatheight)Ellipse2D.Double(doublex,doubley,doublewidth,doubleheight)java.awt.geom.Ellipse2D.DoubleRetangle2D.Double(doublex,doubley,doublewidth,doubleheight)java.awt.geom.Retangle2D.Floatjava.awt.geom.Line2D.DoubleLine2D.double(Point2Dstart,Point2Dend)Line2D.double(doublestartx,double

starty,doubleendx,double

endy)java.awt.geom.Point2D.DoublePoint2D.Double(doublex,doubley)fill(Graphics2Drec)填充顏色Draw(Graphics2Drec)繪制圖形rec二.顏色Graphics2D類的setPaint方法(Graphics類為setColor方法)用來設(shè)置顏色。例:g2.setPaint(Color.red);g2.drawString(“SetColor”,100,100)1.標準顏色black、blue、cyan、darkgray、gray、green、lightgray、magenta、orange、pink、red、white、yellow2.復(fù)合色通過指定紅綠藍三色比例,用Color對象來復(fù)合成一種新的顏色。Color構(gòu)造器如下:Color(intredness,intgreenness,intblueness)其中參數(shù)取值為0--255例:g.setPaint(newColor(0,128,128));3.常用APIjava.awt.ColorvoidColor(intr,intg,intb)

java.awt.Graphicsvoidsetcolor(Colorc)java.awt.Graphic2DvoidsetPaint(paintp)java.awt.CmponentvoidsetBackground(Colorc)voidsetForeground(Colorc)例:填充顏色的例子FillTest.java三.文本和字體1.五個邏輯字體名SanaSerifSerifMonospacedDialogDialogInput2.字體風格Font.PLAINFont.BOLDFond.ITALICFond.BOLD+Font.ITALIC3.設(shè)置字體Fontserif=newFont(“Serif”,Font.BOLD,14);g2.setFont(serif);4.編程控制字體字符輸出的效果取決于下面三個因素:使用的字體字符串繪制字體的設(shè)備幾個基本術(shù)語:

上坡度下坡度空行基線基線高度調(diào)用Graphics2D類中的getFontRenderContext方法,可獲得一個FontRenderContext類的對象,再將該對象Fond類的getStringBounds方法,該方法返回一個包圍字符串的矩形.代碼如下:Stringmessage=“Hello,World!”;Fontf=newFoun(“serif”,Font.BOLD,14);FontRenderContextcontext=g2.getFontRenderContext();Retangle2Dbounds=f.getStringBounds(message,context);獲得字符串寬度、高度、上坡度、下坡度的方法如下:doublestringwidth=bounds.getWidth();doublestringheigth=bounds.getHeigth();doubleascent=-bounds.getY();doubledescent=bounds.getHeigth()+bounds.getY();將字符串顯示在面板中央的代碼如下:Stringmessage=“Hello,World!”;Fontf=newFoun(“serif”,Font.BOLD,14);FontRenderContextcontext=g2.getFontRenderContext();Retangle2Dbounds=f.getStringBounds(message,context);doublex=(getWidth()-bounds.getWidth())/2;doubley=(getHeigth()-bounds.getWidth())/2;doubleascent=-bounds.getY();doublebasey=y+ascent;g2.drawString(message,(int)x,(int)basey);例:將字符串顯示在畫板中央的例子FontTest.javaAPI:java.awt.FontFont(Stringname,intstyle,intSize)StringgetFontName()StringgetFamily()StringgetName()Retangle2DgetStringBounds(Strings,FountRenderContextcontext)java.awt.font.LineMetricsfloatgetAscent()floatgetDecent()floatgetHeight()floatgetWeight()java.awt.GraphicsvoidsetFont(Fontfont)voidDrawString(Stringstr,intx,inty)

四.圖象在Java應(yīng)用程序中須通過使用Toolkit對象,調(diào)用getDefaultToolkit(),完成將一個圖象文件加載到程序中,再調(diào)用Graphics類提供的DrawImage()顯示它。目前只能讀取gif和JPEG格式的文件下面一段代碼用來在本地機上加載一個名為msn.jpg的文件:Imageimg=ToolkitgetDefaultToolkit().getImage(“msn.jpg”)若從網(wǎng)絡(luò)上加載,必須提供URL例:URLu=newURL(“/animage.jpg”);Imageimg=ToolkitgetDefaultToolkit().getImage(u)顯示代碼:publicvoidpaintComponent(Graphicsg){

溫馨提示

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

評論

0/150

提交評論