java cansvas 画虚线要怎么设置?
java cansvas 画虚线通过Graphics2D setStroke(BasicStroke) 设置笔画虚线模式。
BasicStroke是JDK中提供的一个基本的画笔类,我们对他设置画笔的粗细,就可以在drawPanel上任意画出自己想要的图形了。其中这个构造函数就是用来创建虚线的:
public BasicStroke(float width, int cap, int join, float miterlimit, float[] dash, float dash_phase);
构造方法参数说明:
1 width这个参数最容易理解,表示线条的宽度
2 cap只能取三个值:CAP_BUTT, CAP_ROUND or CAP_SQUARE,表示不同的线端。
3 join这个参数表示当两条线连接时,连接处的形状,可以取JOIN_ROUND, JOIN_BEVEL, or JOIN_MITER三个值。
4 miterlimit当你使用JOIN_MITER这种策略来表示连接处形状的时候,由于两根线的连接角度可能很小,那么,就会导致延伸出来的那个角特别长!本参数用来限制那个尖角的最大长度!当你使用JOIN_MITER策略的时候,本参数必须大于1,本参数的默认值是10.0f 。
5 dash[]画虚线的时候,使用这个参数,虚线是由:“线+缺口+线+缺口+线+缺口……”来组成的。所以本参数就是定义的这些线、缺口的长度:{线的长度,缺口的长度,线的长度,缺口的长度……}
6 dash_phase最后一个参数是跟dash[]这个数组配合的参数,表示在画虚线的时候,从一定的偏移量处开始画。
下面这个图,统一说明了dash[]和dash_phase的意思:
Stroke dash = new BasicStroke(2.5f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND,
3.5f,new float[]{15,10,},0f);
BasicStroke 有虚线模式
能说下具体用法吧,谢谢
import java.awt.*;
import java.awt.geom.Line2D;
import javax.swing.*;
public class DashedModelFrame extends JFrame {
public static void main(String args[]) {
DashedModelFrame frame = new DashedModelFrame();
frame.setVisible(true);
}
public DashedModelFrame() {
super();
setTitle("设置虚线模式");
setBounds(100, 100, 326, 220);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(new DashedModelPanel());
}
class DashedModelPanel extends JPanel {
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
float[] arr = {4.0f,2.0f};
// float[] arr = {5.0f,3.0f,2.0f,3.0f}; //另一种虚线模型
BasicStroke stroke = new BasicStroke(1,
BasicStroke.CAP_BUTT,
BasicStroke.JOIN_BEVEL,
1.0f,arr,0);
g2.setStroke(stroke);
Line2D.Float line = new Line2D.Float(20,50,300,50);
g2.draw(line);
}
}
}
发个例子,你看了就明白了