绘制图形
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 | 相对起始角度的弧的角度范围 |
xPoints | X坐标的数组 |
yPoints | Y坐标的数组 |
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图形接口的对象
代码绘制流程
- 创建窗体对象
- 创建 Canvas画布类 并添加入窗体容器里
- 调用 Canvas画布类中 paint(Graphics g)方法
- 调用 paint(Graphics g)方法 中的 Graphics对象 或 创建Graphics2D绘图对象
- 调用 绘图的抽象方法 实现绘图
方式二:(从步骤4开始,适合批量绘图)
- 实例 java.awt.geom包 中的图形类,赋值至 Shape接口 对象
- 传参 调用 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查
画笔
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常量及标识
代码实现流程:
- 创建Stroke接口对象,实例BasicStroke对象
- 设置画笔 setStroke(Stroke)方法
大致例子:
import javax.swing.*;
import java.awt.*;
public class BrushTest extends