天天看點

java核心技術基礎知識個人總結之——圖形程式設計基礎

一、swing概述:swing基于AWT架構之上,Swing是指被繪制的使用者界、面類,AWT是指像事件處理這樣的視窗工具箱的底層機制,Swing可以讓使用者随意的選擇喜歡的感官。

二、架構:沒有包含在其他視窗中的視窗被稱為架構(frame),在AWT中有一個Frame類,是用來描述架構的,這個類在Swing版本中是JFrame(絕大數的Swing元件都有J開頭),它

是極少數幾個不繪制在畫布上的Swing元件之一,它的修飾部件(如按鈕,标題欄,圖示等)由使用者的視窗系統繪制,而不是由Swing繪制,Swing用來繪制架構裡的内容。

JFrame.setVisible(true)方法可以讓架構可見,JFrame.show()可以讓架構可見并且置于其他視窗的前面。JFrame.setDefaultCloseOperation(int i)可以定義關閉這個架構時候的響應動作,讓程式退出的常量是JFrame.EXIT_ON_CLOSE。(以上方法都不是靜态方法!)在初始化完後,main方法退出,這個時候程式并沒有終止,終止的隻是主線程,事件排程線程保持程式處于激活狀态,直到關閉架構或者調用System.exit。

改變架構:

1、Component類:setVisible(boolean bool)設定視窗是否顯示;set||getSize(int w,int h||Dimension d)設定/擷取大小; set||getLocation(int x,int y)設定擷取位置,setBounds(int x,int y,int w,int h)設定位置和大小。

2、windows類:toBack()将視窗移動到桌面視窗棧的後面 ;toFront()将視窗移動到桌面的前面;setLocationByPlatfrom(boolean bool)由平台選擇一個合适的位置顯示視窗。

3、Frame類: isResizable(boolean bool)是否可以讓使用者改變大小;setTitle(String str)設定标題;setIconImage(Image img)設定架構的圖示。

setUndecorate(boolean bool)架構顯示中的标題欄以及關閉按鈕這些是否顯示;setExtendedState(int state)設定視窗的狀态,如Frame.ICONIFIED可以讓視窗最小化。

4、Toolkit類:getDefaultToolkit()傳回一個預設的工具箱;Dimension getScreen()傳回使用者螢幕的尺寸; Image getImage(String filename)加載得到一個指定的圖像對象。

三、繪制元件:繪制一個元件,需要定義一個擴充JComponent的類,并覆寫其中的paintComponent(Graphics g)方法,在JAVA中,所有的繪制都必須使用Craphics對象。隻要視窗需要重新繪圖時,事件處理器就會通告元件,進而執行所有元件的paintComponent方法。不用自己調用paintComponent方法,在應用程式需要重新繪圖的時候,這個方法會自動的被調用,如果需要強制重新繪制元件,那麼要調用的是repaint方法,他将引發采用相應配置的Graphics對象調用所有元件的paintComponent方法。

1、JFrame類:getContentPane()傳回架構裡的内容視窗;add(Component comp)将一個給定的元件添加到該架構的内容視窗中。

2、Component類:repaint()重新繪制元件。

3、JPanel類是一個可以包含其他元件的容器,但同樣也可以在其上面進行繪制。

四、繪制2D圖形:主要是用java.awt.Graphics2D類去繪制圖形的。圖形的類主要在java.awt.geom裡。要掌握這些之間的關系。paintComponent方法可以自動獲得一個Graphics對象,可以把他強制轉型成Graphics2D對象。以下是java.awt.geom包裡的類:

Point2D類:用于描述一個點的抽象類,包含了2個内部靜态類(也是其子類):Double,Float分别用給定的雙精度浮點數和浮點數位置去構造一個點。point類繼承point2D類,并

且是用整型數去構造一個點。

Shape接口:圖形類的接口(不包括Point2D類),RectangularShape類繼承該接口。

RectangularShape抽象類:包含很多擷取閉合矩形圖像位置資訊的方法:getCenterX() getCenterY() getMinX() getMinY() getMaxX() getMaxY()傳回閉合矩形的中心,以及最小、最大X和Y坐标值。setFrame()幾個重載的方法将此 Shape 的架構矩形設定為指定的 Rectangle2D。

Rectangle2D抽象類:繼承RectangularShape抽象類,包含了2個内部靜态類(也是其子類):Double,Float分别用給定的雙精度浮點數和浮點數(左上角x坐标,左上角y坐标,長、寬)去構造一個矩形,也可以先用不帶參數的構造器構造一個空的矩形,然後用方法setFrameFromDiagonal(point x,point y)參數表示對角的2個點去構造一個矩形,也可以是用setFrameFromDiagonal(px,py,qx,qy)參數表示對角點的X,Y坐标去構造一個矩形,該方法屬于RectangularShape抽象類。Rectangle類繼承Rectangle2D類,并且是用整型數去構造一個矩形。

Ellipse2D抽象類:繼承RectangularShape抽象類,包含了2個内部靜态類(也是其子類):Double,Float分别用給定的雙精度浮點數和浮點數(左上角x坐标,左上角y坐标,長、寬)去構造一個橢圓,也可以先用不帶參數的構造器構造一個空的橢圓,然後用方法setFrameFromCenter(point center,point x)參數表示一個中心點坐标,和一個角坐标去構造一橢圓,該方法屬于RectangularShape抽象類,也可以用setFrame()去設定一個外圍的閉合矩形,然後構造橢圓。

Line2D抽象類:繼承Shape接口,用于描述一條直線的抽象類,包含了2個内部靜态類(也是其子類):Double,Float分别用給定的雙精度浮點數和浮點數位置去構造一條直線,4個參數,分别表示起始點的X,Y坐标和結束點的X,Y坐标,參數也可以是2個point2D的對象,分别表示起始點和結束點。point類繼承point2D類,并且是用整型數去構造一個點。

注意:隻有Point2D和Rectangle2D這兩個類有實作類Point和Rectangle用來用整型數繪圖。可以用drawPolygon(int[],int[],int)繪制多邊形,詳情可以檢視API文檔。

五、顔色:在每次繪制前都可以用Graphics2D的對象去調用setPaint,指定一種顔色去繪制圖形,在後面的draw繪制圖形時都是用指定的顔色,也可以用fill去用這種顔色填充圖形。Color類裡面有常量表示一些常用的顔色,也可以new Color(int r,int p,int g)構造一個顔色,SystemColor裡面也有很多表示系統顔色的常量。

六、圖像:可以用ImageIO類裡的靜态方法read去讀取圖像,參數可以是File對象也可以是URL對象。

Graphics類:繪制圖像用drawImage(Image,int x,int y,ImageObserver observer)參數是:要繪制的對象,左上角的X坐标,左上角的Y坐标,繪制程序中以通告為目的的對象。

drawImage(Image,int x,int y,int width,int height,ImageObserver observer)多的兩個參數表示圖像的寬和高。

copyArea(int x,int y,int width,int height,int dx,int dy)從螢幕坐上角X坐标和Y坐标的位置開始拷貝螢幕的一塊高為width寬為height的區域到另一塊與他相隔水準距離為dx垂直距離為dy的區域。