1. 程式人生 > 其它 >Java學習記錄 AWT繪圖篇

Java學習記錄 AWT繪圖篇

技術標籤:Java 學習記錄java

繪製圖形

Canvas畫布類

Class Canvas

java.lang.Object
java.awt.Component
java.awt.Canvas

用來 繪製圖形 或 捕獲使用者輸入的事件。繪製圖形需要繪圖方法實現繪製圖形

方法說明
paint(Graphics g) 繪圖
repaint(Graphics g) 重新繪圖

Graphics繪圖類

Class Graphics

java.lang.Object
java.awt.Graphics

Graphics繪圖類 是所有圖形的抽象基類,它提供了繪圖常用的方法

圖形方法
弧形drawArc(int x , int y , int width , int height , int startAngle , int arcAngle)
直線drawLine(int x1 , int y1 , int x2 , int y2)
橢圓drawOval(int x , int y , int width , int height)
多邊形drawPolygon(int[] xPoints , int[] yPoints , int nPoints)
多邊線drawPolyline(int[] xPoints , int[] yPoints , int nPoints)
矩形drawRect(int x , int y , int width , int height)
圓角矩形drawRoundRect(int x , int y , int width , int height , int arcWidth, int arcHeight)
實心弧形fillArc(int x , int y , int width , int height , int height , int startAngle , int arcAngle)
實心橢圓fillOval(int x , int y , int width , int height)
實心多邊形fillPolygon(int[] xPoints , int[] yPoints , int nPoints)
實心矩形fillRect(int x , int y , int width , int height)
實心圓角矩形fillRoundRect(int x , int y , int width , int height , int arcWidth, int arcHeight)
引數說明
x座標X
y座標Y
width寬度
height高度
startAngle起始角度
arcAngle相對起始角度的弧的角度範圍
xPointsX座標的陣列
yPointsY座標的陣列
nPoints總數
arcWidth四角圓弧的水平直徑
arcHeight四角圓弧的垂直直徑

Graphics2D新繪圖類

Class Graphics2D

java.lang.Object
java.awt.Graphics
java.awt.Graphics2D

Graphics類的擴充套件 Graphics2D新繪圖類,它必須要 draw()和fill() 方法 繪圖
方法的引數需要Shape圖形介面實現繪圖(介面在 java.awt.geom 包下

抽象方法說明
draw(Shape form) 繪製圖形
fill(Shape form) 填充圖形

form:Shape圖形介面的物件

程式碼繪製流程

  1. 建立窗體物件
  2. 建立 Canvas畫布類 並新增入窗體容器裡
  3. 呼叫 Canvas畫布類中 paint(Graphics g)方法
  4. 呼叫 paint(Graphics g)方法 中的 Graphics物件 或 建立Graphics2D繪圖物件
  5. 呼叫 繪圖的抽象方法 實現繪圖

方式二:(從步驟4開始,適合批量繪圖)

  1. 例項 java.awt.geom包 中的圖形類,賦值至 Shape介面 物件
  2. 傳參 呼叫 Graphics2D類 中的 draw() 或 fill() 方法 實現繪圖

大致例子:

大致例子:

import javax.swing.*;
import java.awt.*;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RectangularShape;

public class DrawFrame extends JFrame {

    private Container c = getContentPane();

    public DrawFrame(){
        setBounds(400 , 300 , 360 , 160);
        setDefaultCloseOperation(3);

        //Canvas匿名畫布類 重寫paint()繪圖方法
        c.add(new Canvas(){
           @Override
           public void paint(Graphics g){
               Graphics2D g2 = (Graphics2D) g;
//方法一
               g2.drawRoundRect(10 , 5 , 100 , 100 , 10 , 10);
               g2.fillOval(20 , 15 , 80 , 80);
//方法二
               //宣告圖形陣列
               Shape[] shapes = new Shape[4];
               //以double精度建立
               //繪製圓
               shapes[0] = new Ellipse2D.Double(120, 5 , 100 ,100);
               //繪製矩形
               shapes[1] = new Rectangle2D.Double(230 ,5 ,100 ,100);
                //繪製矩形
               shapes[2] = new Rectangle2D.Double(130 ,15 ,80 ,80);
               //繪製圓
               shapes[3] = new Ellipse2D.Double(240 ,15 ,80 ,80);
               for(Shape tmp : shapes){
                   //Rectangle2D bounds = tmp.getBounds2D();    (Rectangle2D是RectangularShape的子類
                   //RectangularShape類 用來查詢和修改矩形框架的類
                   RectangularShape bounds = tmp.getBounds2D();
                   if(bounds.getWidth() == 80){
                       //第二組圖形建立
                       g2.fill(tmp);
                   }else{
                       //第一組圖形建立
                       g2.draw(tmp);
                   }
               }
           }
        });

    }

    public static void main(String[] args) {
        new DrawFrame().setVisible(true);
    }
}

執行結果:

繪圖屬性

顏色

Class Color

java.lang.Object
java.awt.Color

Color類 提供設定顏色的物件
構造方法

Color(int R , int G , int B)
Color(int RGB)

引數說明

R: 紅色顏色值
G: 綠色顏色值
B: 藍色顏色值
RGB: 組合RGB顏色值

Color常量值 有已定義好的顏色物件,可直接呼叫(自行API查

public void paint(Graphics g){
    super.paint(g);
    Graphics2D g2 = (Graphics2D) g;
    //設定顏色
    g.setColor(Color.RED);
    ···
}

畫筆

Class BasicStroke

java.lang.Object
java.awt.BasicStroke

BasicStroke類 為圖形輪廓定義基本渲染屬性(定義邊線屬性
實現前提需要Stroke介面實現類!!!

**構造方法 **

BasicStroke()
BasicStroke(float width)
BasicStroke(float width , int cap , int join)
BasicStroke(float width , int cap , int join , float miterlimit)
BasicStroke(float width , int cap , int join , float miterlimit , float[] dash , float dash_phase)

引數說明
width畫筆寬度
cap線端點的裝飾
join應用在路徑線段交會處的裝飾
miterlimit斜接處的剪裁限制
dash虛線模式的陣列
dash_phase開始虛線模式的偏移量

CAP引數 3個常量及標識

JOIN引數 3常量及標識

程式碼實現流程:

  1. 建立Stroke介面物件,例項BasicStroke物件
  2. 設定畫筆 setStroke(Stroke)方法

大致例子:

import javax.swing.*;
import java.awt.*;

public class BrushTest extends JFrame {
    public BrushTest(){
        setBounds(400 ,300 ,300 ,230);
        setDefaultCloseOperation(3);
        add(new MyCanvas());
    }

    class MyCanvas extends Canvas{
        @Override
        public void paint(Graphics g) {
            super.paint(g);
            Graphics2D g2 = (Graphics2D)g;

            Stroke[] s = {
                    new BasicStroke(10 , BasicStroke.CAP_ROUND ,BasicStroke.JOIN_ROUND),
                    new BasicStroke(10 , BasicStroke.CAP_BUTT , BasicStroke.JOIN_ROUND),
                    new BasicStroke(10 , BasicStroke.CAP_SQUARE , BasicStroke.JOIN_ROUND),
                    new BasicStroke(10 , BasicStroke.CAP_BUTT , BasicStroke.JOIN_BEVEL)
            };

        //    圖形No.1
            g2.setStroke(s[0]);
            g2.drawLine(10,10 , 230,10);
            g2.setStroke(s[1]);
            g2.drawLine(10,30 , 230,30);
            g2.setStroke(s[2]);
            g2.drawLine(10,50 , 230,50);

        //    圖形No.2
            //更改顏色
            g2.setColor(Color.CYAN);
            g2.setStroke(s[3]);
            int[]   x = {20 ,200 ,20 ,200},
                     y = {80 ,80 ,180 ,180};
            g2.drawPolyline(x , y , 4);
        }
    }

    public static void main(String[] args) {
        new BrushTest().setVisible(true);
    }
}

執行結果:

繪製文字

字型

顯示文字

繪製圖片