【发布时间】:2021-01-21 14:08:44
【问题描述】:
我已经开始使用AffineTransform 来旋转我正在使用Graphics2D 绘制的文本,我注意到它有时会正常工作,而有时当我刚刚意识到它在我的 Windows 7 上始终按预期工作时却不行PC,但从来没有在我的 Windows 10 笔记本电脑上。
我在两个系统上都使用 Java 15.0.1。
这里有一个小测试用例来说明我的观点:
import javax.swing.*;
import java.awt.*;
import java.awt.geom.AffineTransform;
public class AffineTransformTest extends JPanel {
private static final int SIZE = 40;
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
int centerX = getWidth()/2;
int centerY = getHeight()/2;
g2.setColor(Color.BLACK);
g2.drawRect(centerX - SIZE/2, centerY - SIZE/2, SIZE, SIZE);
AffineTransform at = g2.getTransform();
at.setToRotation(Math.toRadians(45),centerX, centerY);
g2.setTransform(at);
g2.setColor(Color.RED);
g2.drawRect(centerX - SIZE/2, centerY - SIZE/2, SIZE, SIZE);
}
public static void main(String[] args) {
JFrame frame = new JFrame();
AffineTransformTest test = new AffineTransformTest();
frame.setContentPane(test);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300,300);
frame.setVisible(true);
}
}
黑色矩形是位于JPanel 中间的常规矩形。
红色矩形是在旋转 45° 后绘制的,应该与黑色矩形共享同一个中心(如第一张图片所示)。
但是,我的笔记本电脑会产生第二张图片中显示的结果。
Expected result - Windows 7 | Incorrect result - Windows 10
这怎么可能?
【问题讨论】:
标签: java affinetransform