How to draw a directed arrow line in Java?

后端 未结 5 1757
眼角桃花
眼角桃花 2020-12-01 06:43

I want to draw a directed arrow line through Java.

At present, I am using java.awt.Line2D.Double class to draw a line

g2.setStroke(new B         


        
5条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-01 07:07

    In the past, I've written the following method to create an an arrow shape, which I can then fill with ((Graphics2D) g).fill(shape);

    public static Shape createArrowShape(Point fromPt, Point toPt) {
        Polygon arrowPolygon = new Polygon();
        arrowPolygon.addPoint(-6,1);
        arrowPolygon.addPoint(3,1);
        arrowPolygon.addPoint(3,3);
        arrowPolygon.addPoint(6,0);
        arrowPolygon.addPoint(3,-3);
        arrowPolygon.addPoint(3,-1);
        arrowPolygon.addPoint(-6,-1);
    
    
        Point midPoint = midpoint(fromPt, toPt);
    
        double rotate = Math.atan2(toPt.y - fromPt.y, toPt.x - fromPt.x);
    
        AffineTransform transform = new AffineTransform();
        transform.translate(midPoint.x, midPoint.y);
        double ptDistance = fromPt.distance(toPt);
        double scale = ptDistance / 12.0; // 12 because it's the length of the arrow polygon.
        transform.scale(scale, scale);
        transform.rotate(rotate);
    
        return transform.createTransformedShape(arrowPolygon);
    }
    
    private static Point midpoint(Point p1, Point p2) {
        return new Point((int)((p1.x + p2.x)/2.0), 
                         (int)((p1.y + p2.y)/2.0));
    }
    

提交回复
热议问题