轉(zhuǎn)帖|其它|編輯:郝浩|2010-06-21 11:42:14.000|閱讀 817 次
概述:JAVA的繪圖功能非常豐富,繪圖包括字體、顏色、圖形,本文來(lái)介紹一下Java繪圖機(jī)制。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
JAVA的繪圖功能非常豐富,繪圖包括字體、顏色、圖形,以下我們將分技術(shù)專題來(lái)講。
一、關(guān)于JAVA的繪圖機(jī)制
JAVA中的任何一個(gè)圖形組件,小到文本框、標(biāo)簽,大到一個(gè)FRAME,一個(gè)DIALOG,都有一個(gè)專門負(fù)責(zé)顯示其界面的函數(shù),這個(gè)函數(shù)名稱是固定的:paint,它的原型為: public void paint(Graphics g) { …… } 每當(dāng)組件大小、位置、組件內(nèi)容發(fā)生變化時(shí),該函數(shù)即負(fù)責(zé)生成新的圖形界面顯示。由于該函數(shù)可以被子類繼承,因此,繼承的子類有能力修改該函數(shù)。如果子類中沒有出現(xiàn)該函數(shù),則表示其行為完全繼承自父類。則不管是組件中是否添加了新的內(nèi)容,是否發(fā)生了大小的改變,是否發(fā)生了位移,父類都要有一個(gè)專門的線程,來(lái)負(fù)責(zé)描繪變化以后的組件界面。 paint函數(shù)由父類自動(dòng)維護(hù),并且如果子類一旦重載該函數(shù),必須自己去維護(hù)所有的界面顯示。
二、設(shè)置畫筆顏色
1、顏色常識(shí)
任何顏色都是三原色組成(RGB),JAVA中支持224位彩色,即紅綠藍(lán)色分量可取值介于0..255之間。下面首先學(xué)習(xí)一個(gè)JAVA中的類Color Color中的常量:
public final static Color black=new Color(0,0,0); public final static Color blue=new Color(0,0,255); ….. |
Color的構(gòu)造函數(shù):
public Color(int r,int g,int b);
使用舉例:如果想構(gòu)造一個(gè)灰色對(duì)象,則用下面的句子:
Color gray=new Color(205,205,205);
2、設(shè)置畫筆顏色語(yǔ)法
g.setColor(color); //color是一個(gè)Color對(duì)象 |
每修改一次顏色它影響的就是下面所有的繪圖語(yǔ)句,一直影響到再次碰到setColor函數(shù)才以新的顏色代替。
3、使用JColorChooser組件選擇顏色 JAVA中有一個(gè)已經(jīng)定義好的選色器,通過(guò)簡(jiǎn)單的語(yǔ)法我們就可以將該窗口調(diào)出來(lái),從其中選擇自己喜歡的顏色。下面的這個(gè)例子就是通過(guò)顏色選取器選取顏色,并將選擇到的顏色做為窗體的背景色。
(1)JColorChooser簡(jiǎn)介 JColorChooser組件的showDialog()方法讓用戶從彈出的窗口中選擇一個(gè)顏色,并傳給Color對(duì)象。其調(diào)用語(yǔ)法如下: color=JColorChooser.showDialog(this,”選色”,color); 第一個(gè)參數(shù)指定調(diào)用選色器的父窗體,第二個(gè)參數(shù)指定選色器窗口標(biāo)題,最后一個(gè)為接收顏色的顏色對(duì)象。
4、如何將一個(gè)圖形(以文件存在,如JPG或者GIF)畫到窗體的畫布中 其實(shí)放置圖形到畫板中實(shí)際就是調(diào)用了畫板的drawImage函數(shù)。其大致思路如下: 首先獲取一個(gè)ImageIcon對(duì)象,這個(gè)對(duì)象將會(huì)從指定的文件中讀取相關(guān)圖象信息,它支持GIF和JPG、BMP等基本圖象格式。語(yǔ)法如下:
ImageIcon icon=new ImageIcon(GraExp5.class.getResource("1.gif"));
獲取到圖象的圖標(biāo)以后,就可以從圖標(biāo)中獲取到繪制到畫板上的實(shí)際需要的圖象:
Image img=icon.getImage();
有了這個(gè)圖象對(duì)象,我們就可以用畫板的drawImage函數(shù)畫圖了。
g.drawImage(img,0,0,null);
中間兩個(gè)參數(shù)是圖象繪制時(shí)在畫板的起始點(diǎn)坐標(biāo)。 例如:
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(); } } |
程序分析: 需要注意的是,圖象文件所在的位置應(yīng)該和該類放在同一個(gè)目錄中,這樣不至于出錯(cuò)。
6、系統(tǒng)擴(kuò)展,綜合應(yīng)用,如何為一個(gè)窗體設(shè)置背景圖片。
要為一個(gè)窗體添加背景圖片,必須知道繪制JComponent組件的過(guò)程。Swing輕量組件的繪制是組件和組件UI代表合作的結(jié)果。 JComponent.paint先繪制組件,然后繪制組件的邊框,再繪制組件的子組件。調(diào)用的順序確保組件、邊框和子組件都是可視的。如果組件有一個(gè)UI代表,則JComponent.paintComponent調(diào)用該代表的Update方法,該方法為不透明組件擦除背景,然后繪制組件。 CInstead是一個(gè)不透明的組件,如果重載paint方法,其背景圖是無(wú)法被擦除的,因此,即使更新了組件的所有包含組件,在界面上是看不到的。所以必須重載paintComponent方法,在繪制子組件前先擦除背景。對(duì)雙緩存組件,paint方法負(fù)責(zé)把組件繪制到屏外緩存中,然后把屏外緩存拷貝到組件的屏上代表中,正因?yàn)槿绱耍覀儾唤ㄗh為Swing組件重載paint,如果需要重新定義如何繪制組件,那么就重載paintComponent()。
7、用可獲取的字體、樣式、字號(hào)修飾文字
(1)函數(shù)說(shuō)明:
字形類Font用于規(guī)范組件所使用的字形大小、樣式和字體等。其構(gòu)造函數(shù):
public Font(String name,int style,int size); |
name表示本地可獲取字體名稱 style表示字體樣式,包含F(xiàn)ont.PLAIN,Font.BOLD,F(xiàn)ont.ITALIC三種,分別對(duì)應(yīng)平體、加粗和斜體。 一個(gè)有用的方法用來(lái)獲取本地可用字體
GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment(); String[] fa=ge.getAvailableFontFamilyNames(); |
通過(guò)從繪圖環(huán)境中獲取到本地可用的字體名數(shù)組。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:IT專家網(wǎng)