Java學習筆記(三)Java2D組件

一  概述

    Java2D的一切都基於java.awt包中的Graphics2D類,它是Graphics的子類。

    爲了繪製圖形,需要使用面板作爲畫布,例如使用JPanel作爲畫布,面板有一個paintCompnent()方法,每當窗口發生變化時,便會調用。該方法接收的對象是Graphics對象,要在方法內將其轉化爲Graphics2D再使用,一般用法爲: 

public void paintComponent(Graphics comp){
    Graphics2D comp2D = (Graphics2D) comp;
}

    圖形的座標系爲橫x豎y,左上爲(0,0)


二  文本

    使用函數drawString(<內容>,<x>,<y>);

    ①使用Font可以改變字體、字形、字號,一般用法爲: 

Font font = new Font("Arial",Font.BOLD+Font.ITALIC,24);

    其中第二參數Font.BOLD爲粗體,Font.ITALIC爲斜體,要複用多個參數,採用加法。

    設置完成後調用Graphics2D對象的setFont(font)方法設置字體。

    ②使用防鋸齒改善顯示質量

    使用Graphics2D對象的setRenderingHint()方法,它有兩個參數,可以簡述爲鍵、鍵值。

comp2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

    ③規範化顯示位置

    使用getFontMetrics(font)方法返回一個FontMetrics對象,利用該對象可以獲取使用當前font顯示的字符串的寬高,調用方法如下:

FontMetrics metrics = getFontMetrics(font);
metrics.stringWidth("abcde");//獲取字符串寬度
metrics.charWidth('a');//獲取字符寬度
metrics.getHeight();//獲取字符串高度


    綜合運用代碼如下: 

package Learn;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
public class GUI2D extends JFrame{
    
    public GUI2D(String text, String fontName){
        super("Show Font");
        setSize(425,150);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        TextFramePanel sf = new TextFramePanel(text,fontName);
        add(sf);
        setVisible(true);
    }
    
    public static void main(String[] argv){
        GUI2D text = new GUI2D("Test GUI Text","Arial");
    }
    
    public class TextFramePanel extends JPanel{
        String text;
        String fontName;
        public TextFramePanel(String text, String fontName){
            super();
            this.text = text;
            this.fontName = fontName;
        }
    
    public void paintComponent(Graphics comp){
        super.paintComponents(comp);
        Graphics2D comp2D = (Graphics2D)comp;
        comp2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);;
        Font font = new Font(fontName,Font.BOLD,24);
        FontMetrics metrics = getFontMetrics(font);
        comp2D.setFont(font);
        int x = (getSize().width - metrics.stringWidth(text))/2;
        int y = getSize().height / 2;
        comp2D.drawString(text, x, y);
    }
}    
    
}


三  圖形

    (一)填充圖案(梯度漸變)

            填充圖案可以作用於所有的Graphics2D組件,使用setPaint()方法來接收設定好的填充方案,常用的爲Color或者GradientPaint,後者是一個梯度漸變,設置方法如下:

GradientPaint gp = new GradientPaint(x1,y1,color1,x2,y2,color2,false);
comp2D.setPaint(gp);

            其中(x1,y1,color1)是漸變起點,(x2,y2,color2)是漸變中點,第三個參數代表是否週期性漸變。

    (二)設置畫筆

            畫筆決定了線寬、線段端點樣式和線段連接樣式,參數如下

            BasicStroke(<線寬>,<端點樣式>,<連接樣式>);

            線寬是float型,通常爲1.0F

            端點樣式有CAP_BUTT(無端點)、CAP_ROUND(圓形端點)、CAP_SQUARE(方形,比無端點要長)

            連接樣式有JOIN_MITER(延伸)、JOIN_ROUND(圓弧鏈接)、JOIN_BEVEL(直線連接)


    (三)繪製對象

            ①創建和設置對象,例如Line2D.Float ln;

            ②使用Graphics2D對象的draw()或者fill()方法,傳入對象完成繪製。

            draw用於繪製邊框,fill用於填充。

            例如線段的繪製過程爲:

Line2D.Float ln = new Line2D.Float(x1,y1,x2,y2);
comp2D.draw(ln);


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章