我的问题不是关于如何使用Java2D旋转文本;我知道如何做到这一点。我不知道的是如何使旋转后的文本“看起来好看”。例如,如果您在PowerPoint中创建一个文本框并将其旋转,无论旋转角度如何,文本都会清晰明了。然而,使用
下面是一个小程序,说明了我所说的内容。更大的字体旋转时还好,但仍然不太专业。旋转后的较小字体非常糟糕。
g2D.drawString()
绘制的文本在0度或90度时还可以,但在其他角度时就不太好看了。有没有一种方法可以操纵文本以清理或锐化它?如果有的话,如果有人能指点我去哪里学习如何做到这一点,我将非常感激。下面是一个小程序,说明了我所说的内容。更大的字体旋转时还好,但仍然不太专业。旋转后的较小字体非常糟糕。
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
public class RotateTest extends JPanel {
String message = "How does this text look?";
public RotateTest() {
this.setPreferredSize(new Dimension(640, 280));
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2D = (Graphics2D) g;
g2D.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2D.setFont(new Font("MyriadPro", Font.BOLD, 20));
g2D.drawString(message, 80, 20);
AffineTransform orig = g2D.getTransform();
double angle = Math.toRadians(7.0);
g2D.rotate(-angle, -10, 80);
g2D.drawString(message, 80, 80);
g2D.setTransform(orig);
angle = Math.toRadians(30.0);
g2D.rotate(-angle, -40, 80);
g2D.drawString(message, 60, 260);
g2D.setTransform(orig);
g2D.setFont(new Font("MyriadPro", Font.BOLD, 12));
g2D.drawString(message, 380, 20);
angle = Math.toRadians(7.0);
g2D.rotate(-angle, -10, 80);
g2D.drawString(message, 380, 120);
g2D.setTransform(orig);
angle = Math.toRadians(30.0);
g2D.rotate(-angle, -40, 80);
g2D.drawString(message, 320, 400);
g2D.setTransform(orig);
}
private void display() {
JFrame f = new JFrame("RotateTest");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.pack();
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new RotateTest().display();
}
});
}
}