Java AWT

来源:互联网 发布:linux echo命令用法 编辑:程序博客网 时间:2024/05/21 01:53

笔划Stroke

Graphics2D的draw方法,使用当前设置的笔划(Stroke)来画形状的边界。

可以使用Graphics2D的setStroke方法,来设置当前的笔划(Stroke)。

需要给setStroke方法提供一个实现了Stroke接口的入参。BasicStroke类实现了Stroke接口,也是Java 2D API中唯一一个实现了Stroke接口的类。

现在看下BasicStroke类怎么构造:BasciStroke(float width, int cap, int join, float miterlimit, float[] dash, float dash_phase)

width 表面笔划的宽度,默认是宽度为1个像素。

cap 笔划端口样式,针对像素大于1的情况。有以下三种:

1. 平头样式(butt cap) 在笔划的末端处就结束了

2. 圆头样式(round cap)在笔划的末端处加了一个半圆

3. 方头样式(square cap)在笔划的末端处加了半个方块

join 定义两个较粗的笔划相遇时的情况,有以下三种:

1. 斜连接(bevel join),用一条直线将两个笔划连接起来,该直线与两个笔划之间的夹角的平分线垂直。

2. 圆连接(round join),延长了每个笔划,并使其带有一个圆头。

3. 斜尖连接(miter join),通过增加一个尖峰,从而同时延长了两个笔划。

miterlimit

dash

dash_phase

着色Paint

Graphics2D的fill方法,使用当前设置的着色Paint来填充形状的内部。

可以使用Graphics2D的setPaint方法,来设置当前的着色Paint。

需要给setPaint方法提供一个实现了Paint接口的入参。Java 2D API中,提供了三个实现了Paint接口的类:

Color类:g2d.setPaint(Color.RED);

GradientPaint类:通过在两个给定的颜色值之间进行渐变,从而改变使用的颜色。g2d.setPaint(new GradientPaint(p1, Color.RED, P2, Color.YELLOW);

TexturePaint类:用一个图像重复地对一个区域进行着色。g2d.setPaint(new TexturePaint(bufferedImage, anchorRectangle));

坐标转换

比例缩放:放大或者缩小从一个固定点出发的所有距离。

旋转:环绕着一个固定中心旋转所有点。

平移:将所有点移动一个固定的量。

切变:

Graphics2D提供了4个方法,scale、rotate、translate和shear,对应上述四种转换。

可以组合这些操作:

g2d.rotate(angle);

g2d.scale(2,2);

g2d.draw(。。。。。。);

这种情况,变换的顺序是无关紧要的。但下述情况变换顺序就很重要了:

g2d.translate(x,y);  // 将某个形状从原点处移回到(x,y)

g2d.rotate(angle);   // 旋转

g2d.translate(-x,-y);      // 将某个形状从点(x,y)处移动到原点

注意变换是逆序执行的,最后一个变换操作是第一个被应用的。以上三步实现了将形状安装某个指定的点进行旋转。等价于g2d.rotate(angle,x,y)。

 

仿射变换(affine transformation),AffineTransform类:

AffineTransform t = new AffineTransform(a,b,c,d,e,f);

g2d.setTransform(t);  // 用t替换当前的transformation

g2d.transform(t); // 将t和当前的transformation组合起来

 

AffineTransform oldTransform = g2d.getTransform(); // 保存旧的transform

g2d.transform(t); // apply temporary transform

// now draw

g2d.setTransform(oldTransform); // 画完后,恢复。

 

 

 

 

 

    

   

0 0
原创粉丝点击