1. 程式人生 > >Java 之 Graphics 繪圖

Java 之 Graphics 繪圖

Graphics 繪圖

Graphics 類是所有圖形上下文的抽象基類,允許應用程式在元件(已經在各種裝置上實現)以及閉屏影象上進行繪製。

建構函式摘要

因為 Graphics 是一個抽象類,所以應用程式不能直接呼叫此構造方法。圖形上下文從其他圖形上下文獲取,或者通過在元件上呼叫 getGraphics() 來建立。

如何獲取 Graphics 物件

注:獲取 Graphics 物件方式有不少,但是能的不多。

一、重寫 paint(Graphics g) 方法

public class MyPanel extends JPanel {
    @Override
    protected void paint(Graphics g) {
        super.paint(g);
        Graphics myGraphics = g;
    }
}

二、Component.getGraphics()

public class MyFram extend JFrame{
    private Graphics graphics;
    private JPanel panel;

    public MyFram(){
        setTitle("獲取Graphics 物件");
        setSize(300,300);
        setLocation(nwe Point(300,200));
        setVisible(true);
        /**
            TODO: 獲取 Graphics 物件
            因為 JPanel 繼承了 Component 類所以可以呼叫 getGraphics() 方法。
        */
        graphics = panel.getGraphics();
        graphics.drawLine(3,5,200,300);
        add(panel);
    }
}

此時會出現 NullPointerException 原因: 因為 JPanel、JFrame等類沒有實現 getGraphics() 方法。

所以想要使用 getGraphics() 來獲取物件,使用前確認呼叫 getGraphics() 方法的物件有沒有重寫 getGraphics() 方法。此外,還有別的方法我就不在演示,自行查詢。

方法摘要

1、畫線、畫點

// TODO: 方法宣告
public abstarct void drawLine(int x1,int y1,int x2,int y2);

引數解釋

x1、y1 第一個點的座標;x2、y2 第二個點的座標

示例

// TODO: 畫一條線段
g.drawLine(3,3,50,50);
// TODO: 畫一個點。兩點重合既是畫點。
g.drawLine(100,100,100,100);

2、畫矩形

    // 繪製指定矩形邊框,即只是線條矩形
    public void drawRect(int x, int y, int width, int height)
    // 繪製填充矩形
    public abstract void fillRect(int x, int y, int width, int height)

引數解釋

x, y 為矩形左上角的座標點,即位置。 width、height 矩形的寬高。

示例

    // TODO: 繪製線條矩形
    g.drawRect(80,100,40,25);
    // TODO: 設定顏色
    g.setColor(Color.yellow);
    // TODO: 繪製填充
    g.fillRect(20,70,20,30);

效果

3、畫圓角矩形

    // 繪製圓角線條矩形
    public abstract void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)
    // 繪製圓角填充矩形
    public abstract void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)

引數解釋

x,y --> 矩形左上角位置座標點 width,height --> 矩形寬高 arcWidth --> 4 個角弧度的水平直徑 arcHeight --> 4 個角弧度的垂直直徑

示例

    // TODO: 繪製圓角線條矩形
    g.drawRoundRect(10,10,150,70,40,25);
    // TODO: 設定顏色
    g.setColor(Color.blue);
    // TODO: 繪製圓角填充矩形
    g.fillRoundRect(80,100,100,100,60,40);
    /**
        TODO: 用繪製圓角矩形的方法繪製 圓形
        當 width、height、arcWidth、arcHeight 相等,即為 圓。
    */
    g.setColor(Color.red);
    g.fillRoundRect(80,90,100,100,100,100);

效果

4、畫 3-D 高亮顯示矩形

    // 繪製圓角線條矩形
    public void draw3DRect(int x, int y, int width, int height, boolean raised)
    // 繪製圓角填充矩形
    public void fill3DRect(int x, int y, int width, int height, boolean raised)

引數解釋

x,y --> 矩形左上角位置座標點 width,height --> 矩形寬高 raised --> 一個用於確定矩形是凸出平面顯示還是凹入平面顯示的 boolean 值

示例

    g.setColor(Color.red);
    // TODO: 繪製三維線條矩形
    g.draw3DRect(80,100,40,25,true);
    g.setColor(Color.yellow);
    // TODO: 繪製三維填充矩形
    g.fill3DRect(20,70,20,30,false);

效果

5、畫圓弧

    // 繪製圓角線條矩形
    public abstract void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle)
    // 繪製圓角填充矩形
    public abstract void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle)

引數解釋

x,y --> 矩形左上角位置座標點 width,height --> 矩形寬高 startAngle --> 開始角度 arcAngle --> 相對於開始角度而言,弧跨越的角度。

示例

    // TODO: 繪製圓弧線
    g.drawArc(10,40,90,50,0,180);
    g.setColor(Color.yellow);
    // TODO: 繪製填充缺右上角的四分之三的橢圓
    g.fillArc(10,100,40,40,0,-270);

效果

6、畫橢圓

     // 繪製線條橢圓
    public abstract void drawOval(int x, int y, int width, int height)
    // 繪製填充橢圓
    public abstract void fillOval(int x, int y, int width, int height)

引數解釋

x,y --> 矩形左上角位置座標點 width,height --> 矩形寬高

示例

    // TODO: 繪製線條橢圓
    g.drawOval(50,50,130,80);
    g.setColor(Color.blue);
    // TODO: 繪製填充橢圓
    g.fillOval(180,180,50,80);

效果

7、畫折線圖

    // 繪製 折線圖
    public abstract void drawPolyline(int[] xPoints,int[] yPoints,int nPoints)

引數解釋

xPoints - x 座標陣列。 yPoints - y 座標陣列。 nPoints - 點的總數。

示例

    // TODO: 橫座標集
    int x[] = {50,80,120,180};
    // TODO: 縱座標集
    int y[] = {150,100,80,70};
    // 繪製 折線圖
    g.drawPolyline(x,y,4);

效果

8、畫 圖片

    // 繪製 指定路徑圖片
    public abstract boolean drawImage(Image img,int x,int y, int width,int height,ImageObserver observer)  

引數解釋

img --> 要繪製的指定影象。 x - x 座標。 y - y 座標。 width - 矩形的寬度。 height - 矩形的高度。 observer - 轉換了更多影象時要通知的物件。

示例

    // TODO: 此路徑為相對路徑,並不是獲取該系統資料夾下路徑圖片。
    ImageIcon image = new ImageIcon(this.getClass().getResource("bigdata.jpg"));
    // TODO: 根據 icon 獲取 image
    Image myImage = image.getImage();
    // TODO: 繪製 圖片
    g.drawImage(myImage, 0, 0, this.getWidth(), this.getHeight(),this);

效果