前面介紹了如何使用畫筆在控件上展示圖像,可是圖像來源于磁盤圖檔,無法即興繪制個性化的圖案。所幸畫筆工具Graphics不僅能夠描繪圖像,還支援繪制常見的幾何形狀,也支援繪制文本字元串,除了繪制圖像用到的drawImage方法,Graphics還有下列常見的繪圖方法:
setColor:設定畫筆的顔色。
drawLine:在指定坐标的(x1,y1)與(x2,y2)兩點之間畫條線段。
drawRect:以坐标點(x,y)為左上角,繪制指定寬高的矩形邊框。
fillRect:以坐标點(x,y)為左上角,繪制指定寬高的矩形區域。
drawRoundRect:以坐标點(x,y)為左上角,繪制指定寬高和指定圓角的圓角矩形邊框。
fillRoundRect:以坐标點(x,y)為左上角,繪制指定寬高和指定圓角的圓角矩形區域。
drawOval:以坐标點(x,y)為外切矩形的左上角,繪制指定橫縱半徑的橢圓輪廓。注意,如果橫縱半徑的數值相等,此時橢圓就變成了圓形。
fillOval:以坐标點(x,y)為外切矩形的左上角,繪制指定橫縱半徑的橢圓區域。
drawArc:以坐标點(x,y)為外切矩形的左上角,繪制指定橫縱半徑和指定角度的圓弧。
fillArc:以坐标點(x,y)為外切矩形的左上角,繪制指定橫縱半徑和指定角度的扇形。
setFont:設定畫筆的字型。
drawString:在目前位置的橫縱偏移距離處繪制文本。
此外,Graphics也支援幾種簡單的管理操作,包括平移畫筆、擦除區域、裁剪畫布等功能,對應的處理方法說明如下:
translate:平移畫筆至坐标點(x,y)。
clearRect:清除某塊矩形區域,該矩形以坐标點(x,y)為左上角,且符合指定寬高。
clipRect:裁剪某塊矩形區域,該矩形以坐标點(x,y)為左上角,且符合指定寬高。該方法的執行效果與clearRect正好相反,clearRect方法清除了矩形内部的所有圖案;而clipRect方法清除了矩形外部的所有圖案,隻留下矩形内部的圖案。
:。
繪制圖案與字元串的過程與繪制圖像一樣,都是重寫自定義控件的paint方法,在該方法中調用畫筆對象的各種繪圖方法。接下來按照之前的圖像視圖依樣畫瓢定義一個繪畫視圖DrawView,變動之處在于繪制控件的paint方法,并據此示範幾種圖案的實作效果。首先準備繪制一條黑色線段,線段的起點位于控件的左上角,終點位于控件的右下角,則相應的繪制方法示例如下:
g.setColor(Color.BLACK); // 設定畫筆的顔色為黑色
// 在指定坐标的(x1,y1)與(x2,y2)兩點之間畫條線段
g.drawLine(0, 0, getWidth(), getHeight());
主界面的代碼比較簡單,有關繪畫視圖的調用可參考如下的代碼片段:
Panel panelCenter = new Panel(); // 建立中央面闆
DrawView draw = new DrawView(); // 建立一個繪畫視圖
draw.setSize(360, 180); // 設定繪畫視圖的寬高
panelCenter.add(draw); // 在中央面闆上添加繪畫視圖
frame.add(panelCenter, BorderLayout.CENTER); // 把中央面闆添加到視窗的中間位置
運作修改後的測試代碼,彈出的線段繪制視窗界面如下圖所示。
接着繪制一個矩形邊框,假設邊框為紅色,則對應的繪制方法如下所示:
g.setColor(Color.RED); // 設定畫筆的顔色為紅色
// 以坐标點(x,y)為左上角,繪制指定寬高的矩形邊框
g.drawRect(10, 10, getWidth() - 20, getHeight() - 20);
同樣運作測試界面代碼,彈出的矩形繪制視窗界面如下圖所示。
再繪制一個綠色的圓角矩形,但它是實心的,此時繪制過程應當調用fillRoundRect方法:
g.setColor(Color.GREEN); // 設定畫筆的顔色為綠色
// 以坐标點(x,y)為左上角,繪制指定寬高和指定圓角的圓角矩形區域
g.fillRoundRect(10, 10, getWidth() - 20, getHeight() - 20, 50, 50);
運作主界面的測試代碼,彈出的圓角矩形繪制視窗如下圖所示。
繼續繪制一個藍色的橢圓輪廓,注意它是空心的,此時繪制過程應當調用drawOval方法:
g.setColor(Color.BLUE); // 設定畫筆的顔色為藍色
// 以坐标點(x,y)為外切矩形的左上角,繪制指定橫縱半徑的橢圓輪廓
g.drawOval(10, 10, getWidth() - 20, getHeight() - 20);
運作主界面的測試代碼,彈出的橢圓繪制視窗界面如下圖所示。
還可以繪制一個橙色的扇形,所謂扇形是由某段圓弧連接配接兩端的橫縱半徑組成,是以它相當于實心的圓弧,此時繪制過程應當調用dfillArc方法:
g.setColor(Color.ORANGE); // 設定畫筆的顔色為橙色
// 以坐标點(x,y)為外切矩形的左上角,繪制指定橫縱半徑和指定角度的扇形
g.fillArc(10, 10, getWidth() - 20, getHeight() - 20, 0, 90);
運作主界面的測試代碼,彈出的扇形繪制視窗界面如下圖所示。
最後使用畫筆繪制幾個文字,同時指定這段文字的顔色、字型以及大小,則對應的繪制方法如下所示:
g.setColor(Color.BLACK); // 設定畫筆的顔色為黑色
g.setFont(new Font("大号粗體", Font.BOLD, 50)); // 設定畫筆的字型
g.drawString("春天花會開", 50, 50); // 在目前位置的橫縱偏移距離處繪制文本
運作主界面的測試代碼,彈出的文字繪制視窗界面如下圖所示。
更多Java技術文章參見《Java開發筆記(序)章節目錄》