java繪圖機制)

來源:互聯網
上載者:User
JAVA的繪圖功能非常豐富,繪圖包括字型、顏色、圖形,以下我們將分技術專題來講。
一、關於JAVA的繪圖機制。
JAVA中的任何一個圖形組件,小到文字框、標籤,大到一個FRAME,一個DIALOG,都有一個專門負責顯示其介面的函數,這個函數名稱是固定的:paint,它的原型為:
public void paint(Graphics g)
{
……
}
每當組件大小、位置、組件內容發生變化時,該函數即負責產生新的圖形介面顯示。由於該函數可以被子類繼承,因此,繼承的子類有能力修改該函數。如果子類中沒有出現該函數,則表示其行為完全繼承自父類。則不管是組件中是否添加了新的內容,是否發生了大小的改變,是否發生了位移,父類都要有一個專門的線程,來負責描繪變化以後的組件介面。 paint函數由父類自動維護,並且如果子類一旦重載該函數,必須自己去維護所有的介面顯示。二、設定畫筆顏色
1、顏色常識
任何顏色都是三原色組成(RGB),JAVA中支援224位彩色,即紅綠藍色分量可取值介於0..255之間。下面首先學習一個JAVA中的類Color
Color中的常量:
public final static Color black=new Color(0,0,0);
public final static Color blue=new Color(0,0,255);
…..
Color的建構函式:
public Color(int r,int g,int b);

使用舉例:如果想構造一個灰色對象,則用下面的句子:
Color gray=new Color(205,205,205);

2、設定畫筆顏色文法
g.setColor(color); //color是一個Color對象
每修改一次顏色它影響的就是下面所有的繪圖語句,一直影響到再次碰到setColor函數才以新的顏色代替。
3、使用JColorChooser組件選擇顏色
JAVA中有一個已經定義好的選色器,通過簡單的文法我們就可以將該視窗調出來,從其中選擇自己喜歡的顏色。下面的這個例子就是通過色彩選擇器選取顏色,並將選擇到的顏色做為表單的背景色。
(1)JColorChooser簡介
JColorChooser組件的showDialog()方法讓使用者從彈出的視窗中選擇一個顏色,並傳給Color對象。其調用文法如下:

color=JColorChooser.showDialog(this,”選色”,color);
第一個參數指定調用選色器的父表單,第二個參數指定選色器視窗標題,最後一個為接收顏色的顏色對象。
4、如何將一個圖形(以檔案存在,如JPG或者GIF)畫到表單的畫布中
其實放置圖形到畫板中實際就是調用了畫板的drawImage函數。其大致思路如下:
首先擷取一個ImageIcon對象,這個對象將會從指定的檔案中讀取相關圖象資訊,它支援GIF和JPG、BMP等基本圖象格式。文法如下:
ImageIcon icon=new ImageIcon(GraExp5.class.getResource("1.gif"));
擷取到圖象的表徵圖以後,就可以從表徵圖中擷取到繪製到畫板上的實際需要的圖象:
Image img=icon.getImage();
有了這個圖象對象,我們就可以用畫板的drawImage函數畫圖了。
g.drawImage(img,0,0,null);
中間兩個參數是圖象繪製時在畫板的起始點座標。
例如:

import java.awt.*;import java.awt.event.*;import javax.swing.*; public class GraExp5 extends JFrame{   ImageIcon icon;   Image img;    public GraExp5()   {      icon=new ImageIcon(GraExp5.class.getResource("1.gif"));      img=icon.getImage();      setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);      setSize(new Dimension(400,300));      show();   }   public void paint(Graphics g)   {      g.drawImage(img,0,0,null);   }   public static void main(String[] args)   {      GraExp5 ge=new GraExp5();   }}
程式分析:
需要注意的是,圖象檔案所在的位置應該和該類放在同一個目錄中,這樣不至於出錯。6、系統擴充,綜合應用,如何為一個表單設定背景圖片。
要為一個表單添加背景圖片,必須知道繪製JComponent組件的過程。Swing輕量組件的繪製是組件和組件UI代表合作的結果。
JComponent.paint先繪製組件,然後繪製組件的邊框,再繪製組件的子組件。調用的順序確保組件、邊框和子組件都是可視的。如果組件有一個UI代表,則JComponent.paintComponent調用該代表的Update方法,該方法為不透明組件擦除背景,然後繪製組件。
CInstead是一個不透明的組件,如果重載paint方法,其背景圖是無法被擦除的,因此,即使更新了組件的所有包含組件,在介面上是看不到的。所以必須重載paintComponent方法,在繪製子組件前先擦除背景。
對雙緩衝組件,paint方法負責把組件繪製到屏外緩衝中,然後把屏外緩衝拷貝到組件的屏上代表中,正因為如此,我們不建議為Swing組件重載paint,如果需要重新定義如何繪製組件,那麼就重載paintComponent()。

7、用可擷取的字型、樣式、字型大小修飾文字
(1)函數說明:
字形類Font用於規範組件所使用的字形大小、樣式和字型等。其建構函式:
public Font(String name,int style,int size);
name表示本地可擷取字型名稱
style表示字型樣式,包含Font.PLAIN,Font.BOLD,Font.ITALIC三種,分別對應平體、加粗和斜體。

一個有用的方法用來擷取本地可用字型
GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
String[] fa=ge.getAvailableFontFamilyNames();
通過從繪圖環境中擷取到本地可用的字型名數組。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.