前面介紹瞭如何使用畫筆在控制項上展示圖像,可是圖像來源於磁碟圖片,無法即興繪製個性化的圖案。所幸畫筆工具Graphics不僅能夠描繪圖像,還支持繪製常見的幾何形狀,也支持繪製文本字元串,除了繪製圖像用到的drawImage方法,Graphics還有下列常見的繪圖方法:setColor:設置畫筆的顏色。 ...
前面介紹瞭如何使用畫筆在控制項上展示圖像,可是圖像來源於磁碟圖片,無法即興繪製個性化的圖案。所幸畫筆工具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開發筆記(序)章節目錄》