Question

How to draw string in java parallel to a line when I know line coordinates? Below is my code so far, x1,y1 and x2,y2 represents the coordinates of line. (text has to be parallel and to the center of the line)

g.drawLine(x1, y1, x2, y2);

AffineTransform at = new AffineTransform();
at.rotate(<WHAT TO PUT HERE>);
g.setTransform(at);
g.drawString("My Text", <WHAT TO PUT HERE> , <WHAT TO PUT HERE>);
Was it helpful?

Solution 2

After some more research,

This is what I came up with

        //draw the line
        g.drawLine(x1, y1, x2, y2);

        //get center of the line
        int centerX =x1 + ((x2-x1)/2);
        int centerY =y1 + ((y2-y1)/2);

        //get the angle in degrees
        double deg = Math.toDegrees(Math.atan2(centerY - y2, centerX - x2)+ Math.PI);

        //need this in order to flip the text to be more readable within angles 90<deg<270
        if ((deg>90)&&(deg<270)){
            deg += 180;
        }

        double angle = Math.toRadians(deg);

        String text = "My text";
        Font f = new Font("default", Font.BOLD, 12);
        FontMetrics fm = g.getFontMetrics(f);
        //get the length of the text on screen
        int sw =  fm.stringWidth(text);

        g.setFont(f);
        //rotate the text
        g.rotate(angle, centerX, centerY);
        //draw the text to the center of the line
        g.drawString(text, centerX - (sw/2), centerY - 10); 
        //reverse the rotation
        g.rotate(-angle, centerX, centerY);

Thanks to @rocketboy and @resueman for the help

OTHER TIPS

tan(theta) = slope = (y2-y1)/(x2-x1)

theta = atan(slope)

that implies,use

at.rotate(Math.toRadians(theta))

As for

g.drawString(String str, int x, int y)

x,y is the coordinate of the leftmost character of your string.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top