JAVA的繪圖功能非常豐富繪圖包括字體顏色圖形以下我們將分技術專題來講
一關於JAVA的繪圖機制
JAVA中的任何一個圖形組件小到文本框標簽大到一個FRAME一個DIALOG都有一個專門負責顯示其界面的函數這個函數名稱是固定的paint它的原型為 public void paint(Graphics g) { …… } 每當組件大小位置組件內容發生變化時該函數即負責生成新的圖形界面顯示由於該函數可以被子類繼承因此繼承的子類有能力修改該函數如果子類中沒有出現該函數則表示其行為完全繼承自父類則不管是組件中是否添加了新的內容是否發生了大小的改變是否發生了位移父類都要有一個專門的線程來負責描繪變化以後的組件界面 paint函數由父類自動維護並且如果子類一旦重載該函數必須自己去維護所有的界面顯示
二設置畫筆顏色
顏色常識
任何顏色都是三原色組成(RGB)JAVA中支持位彩色即紅綠藍色分量可取值介於之間下面首先學習一個JAVA中的類Color Color中的常量
public final static Color black=new Color();
public final static Color blue=new Color();
…
Color的構造函數
public Color(int rint gint b);
使用舉例如果想構造一個灰色對象則用下面的句子
Color gray=new Color();
設置畫筆顏色語法
gsetColor(color); //color是一個Color對象
每修改一次顏色它影響的就是下面所有的繪圖語句一直影響到再次碰到setColor函數才以新的顏色代替
使用JColorChooser組件選擇顏色 JAVA中有一個已經定義好的選色器通過簡單的語法我們就可以將該窗口調出來從其中選擇自己喜歡的顏色下面的這個例子就是通過顏色選取器選取顏色並將選擇到的顏色做為窗體的背景色
()JColorChooser簡介 JColorChooser組件的showDialog()方法讓用戶從彈出的窗口中選擇一個顏色並傳給Color對象其調用語法如下 color=JColorChoosershowDialog(this選色color); 第一個參數指定調用選色器的父窗體第二個參數指定選色器窗口標題最後一個為接收顏色的顏色對象
如何將一個圖形(以文件存在如JPG或者GIF)畫到窗體的畫布中 其實放置圖形到畫板中實際就是調用了畫板的drawImage函數其大致思路如下 首先獲取一個ImageIcon對象這個對象將會從指定的文件中讀取相關圖象信息它支持GIF和JPGBMP等基本圖象格式語法如下
ImageIcon icon=new ImageIcon(GraExpclassgetResource(gif));
獲取到圖象的圖標以後就可以從圖標中獲取到繪制到畫板上的實際需要的圖象
Image img=icongetImage();
有了這個圖象對象我們就可以用畫板的drawImage函數畫圖了
gdrawImage(imgnull);
中間兩個參數是圖象繪制時在畫板的起始點坐標 例如
import javaawt*;
import javaawtevent*;
import javaxswing*;
public class GraExp extends JFrame {
ImageIcon icon;
Image img;
public GraExp() {
icon=new ImageIcon(GraExpclassgetResource(gif));
img=icongetImage();
setDefaultCloseOperation(WindowConstantsDISPOSE_ON_CLOSE);
setSize(new Dimension());
show();
}
public void paint(Graphics g) {
gdrawImage(imgnull);
}
public static void main(String[] args)
{
GraExp ge=new GraExp();
}
}
程序分析 需要注意的是圖象文件所在的位置應該和該類放在同一個目錄中這樣不至於出錯
系統擴展綜合應用如何為一個窗體設置背景圖片
要為一個窗體添加背景圖片必須知道繪制JComponent組件的過程Swing輕量組件的繪制是組件和組件UI代表合作的結果 JComponentpaint先繪制組件然後繪制組件的邊框再繪制組件的子組件調用的順序確保組件邊框和子組件都是可視的如果組件有一個UI代表則JComponentpaintComponent調用該代表的Update方法該方法為不透明組件擦除背景然後繪制組件 CInstead是一個不透明的組件如果重載paint方法其背景圖是無法被擦除的因此即使更新了組件的所有包含組件在界面上是看不到的所以必須重載paintComponent方法在繪制子組件前先擦除背景對雙緩存組件paint方法負責把組件繪制到屏外緩存中然後把屏外緩存拷貝到組件的屏上代表中正因為如此我們不建議為Swing組件重載paint如果需要重新定義如何繪制組件那麼就重載paintComponent()
用可獲取的字體樣式字號修飾文字
()函數說明
字形類Font用於規范組件所使用的字形大小樣式和字體等其構造函數
public Font(String nameint styleint size);
name表示本地可獲取字體名稱 style表示字體樣式包含FontPLAINFontBOLDFontITALIC三種分別對應平體加粗和斜體 一個有用的方法用來獲取本地可用字體
GraphicsEnvironment
ge=GraphicsEnvironmentgetLocalGraphicsEnvironment();
String[]
fa=gegetAvailableFontFamilyNames();
通過從繪圖環境中獲取到本地可用的字體名數組
From:http://tw.wingwit.com/Article/program/Java/hx/201311/27064.html