Java drawString与一行平行

时间:2013-08-02 13:10:46

标签: java drawstring

当我知道线坐标时,如何在java中平行于一条线绘制字符串? 下面是我的代码到目前为止,x1,y1和x2,y2代表线的坐标。 (文字必须平行并且在线的中心)

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>);

2 个答案:

答案 0 :(得分:0)

  

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

     

theta = atan(坡度)

暗示,use

at.rotate(Math.toRadians(theta))

至于

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

x,y是字符串leftmost character的坐标。

答案 1 :(得分:0)

经过一些研究后,

这就是我想出来的

        //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);

感谢@rocketboy和@resueman的帮助