正文

Java圖形與文本(25)

Java開發(fā)實(shí)戰(zhàn)1200例(第II卷) 作者:李鐘尉


實(shí)例025  繪制公章

實(shí)例說明

本實(shí)例演示如何使用坐標(biāo)軸平移、縮放、繪制橢圓、繪制多邊形和繪制文本等技術(shù)實(shí)現(xiàn)公章的繪制。運(yùn)行程序,將在窗體上顯示繪制的公章,效果如圖1.25所示。

關(guān)鍵技術(shù)

本實(shí)例主要是通過在JPanel類的子類中,重寫JComponent類的paint()方法,并在該方法中使用Graphics2D類的translate()、setColor()、scale()、drawString()、fillPolygon()和draw()等方法來實(shí)現(xiàn)的。

(1)使用Graphics2D類的translate()方法將坐標(biāo)軸平移到指定點(diǎn)。

(2)使用Graphics2D類的setColor()方法設(shè)置顏色。

(3)使用Graphics2D類的scale()方法對(duì)公章中的文本進(jìn)行縮放。

(4)使用Graphics2D類的drawString()方法繪制文本,該方法是從Graphics類繼承的。

(5)使用Graphics2D類的fillPolygon()方法繪制公章的五星,該方法也是從Graphics類繼承的。

(6)使用Graphics2D類的draw()方法繪制表示公章的圓。

設(shè)計(jì)過程

(1)新建一個(gè)項(xiàng)目。

(2)在項(xiàng)目中創(chuàng)建一個(gè)繼承JFrame類的DrawCachetFrame窗體類。

(3)在DrawCachetFrame窗體類中,創(chuàng)建內(nèi)部面板類DrawCachetPanel,并重寫JComponent類的paint()方法,在該方法中實(shí)現(xiàn)公章的繪制。

(4)將內(nèi)部面板類DrawCachetPanel的實(shí)例,添加到窗體類DrawCachetFrame的內(nèi)容面板上,用于在窗體上顯示繪制的公章,代碼如下:

class DrawCachetPanel extends JPanel {  // 創(chuàng)建內(nèi)部面板類

    public void paint(Graphics g) {  // 重寫paint()方法

        Graphics2D g2 = (Graphics2D) g;  // 獲得Graphics2D對(duì)象

        g2.translate(170, 100); // 平移坐標(biāo)軸

        BasicStroke stroke = new BasicStroke(6);  // 創(chuàng)建寬度是6的筆畫對(duì)象

        g2.setStroke(stroke); // 設(shè)置筆畫對(duì)象

        // 繪制圓

        Ellipse2D.Float ellipse = new Ellipse2D.Float(-80, -80, 160, 160); // 創(chuàng)建圓對(duì)象

        Color color = new Color(255, 0, 0); // 創(chuàng)建顏色對(duì)象

        g2.setColor(color); // 指定顏色

        g2.draw(ellipse); // 繪制圓

        // 繪制五星

        int[] x1 = { 0, 8, 30, 16, 25, 0, -25, -16, -30, -8 };  // 多邊形的橫坐標(biāo)

        int[] y1 = { -35, -10, -15, 5, 28, 10, 28, 5, -15, -10 };  // 多邊形的縱坐標(biāo)

        int n1 = 10; // 多邊形的邊數(shù)

        g2.fillPolygon(x1, y1, n1); // 繪制多邊形

        // 繪制文本

        g2.scale(1.8, 1.8); // 放大

        Font font = new Font("宋體", Font.BOLD, 12); // 創(chuàng)建字體

        g2.setFont(font); // 設(shè)置字體

        g2.drawString("專 用 章", -25, 30); // 繪制文本

        int width = getWidth(); // 獲得面板寬度

        int height = getHeight(); // 獲得面板高度

        char[] array = " 明日科技有限公司         ".toCharArray(); // 把字符串轉(zhuǎn)換為字符數(shù)組

        int len = array.length * 2; // 定義半徑

        font = new Font("宋體", Font.BOLD, 10); // 創(chuàng)建新字體

        g2.setFont(font); // 設(shè)置字體

        double angle = 0; // 初始角度

        for (int i = 0; i < array.length; i++) { // 遍歷字符串中的字符

            int x = (int) (len * Math.sin(Math.toRadians(angle + 270))); // 計(jì)算每個(gè)文字的位置

            int y = (int) (len * Math.cos(Math.toRadians(angle + 270))); // 計(jì)算每個(gè)文字的位置

            g2.drawString(array[i] + "", width / 2 + x - 168, height / 2 - y - 95); // 繪制每個(gè)字符,其中168和95是坐標(biāo)平移值

            angle = angle + 360d / array.length; // 改變角度

        }

    }

}

秘笈心法

心法領(lǐng)悟025:正確設(shè)置繪圖上下文的屬性。

在進(jìn)行圖形和文本的繪制時(shí),要求能夠正確設(shè)置繪圖上下文的屬性,如文本的字體、顏色,圖形線條的粗細(xì)、虛實(shí)及顏色等,正確設(shè)置的方法是在繪制每一種新樣式的文本或圖形之前,先對(duì)繪圖上下文的屬性進(jìn)行設(shè)置,然后再繪制文本和圖形,這樣設(shè)置的繪圖上下文屬性才是有效的。

 


上一章目錄下一章

Copyright ? 讀書網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)