一些調查研究後,
這是我想出了
//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的幫助
這不回答你的問題,但你不應該使用'setTransform'來覆蓋現有的變換。該方法只是爲了將早期狀態恢復到Graphics2D對象。 – resueman
謝謝!你是絕對正確的。我在想什麼...... D – sanjan