我尝试在基于选定角度30,90等上旋转JLabel
文字。我写了CustomJLabel
类:
public CustomJLabel extends JLabel {
private int angle=360; //setter and getters
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Rectangle rectangle = g2d.getClipBounds();
g2d.rotate((getAngle() * java.lang.Math.PI) / 4, rectangle.getCenterX(), rectangle.getCenterY());
}
}
Main.java:
CustomJLabel cst=new CustomJLabel ();
cst.setAngle(value);
cst.repaint();
cst.setSize(getPrefferedsize());
运行上面的代码时。它根据角度旋转文本正确。但它不正确的矩形形状。请查看以下图片。
水平(360)
垂直(90)
请观察红色圆圈,图像垂直90度并检查。以下是JLabel
缺少的顶行和底行。为什么会丢失?
答案 0 :(得分:2)
回想一下,Graphics
指定了以下内容:
绘制图形轮廓的操作通过遍历像素之间的无限细路径来操作,像素大小的笔将向下悬挂到右侧 * 路径上的锚点。
当您使用身份转换绘制Rectangle
具有getClipBounds()
返回的尺寸的Rectangle
时,它将被剪裁在右侧和底部。当您使用不同的变换绘制相同的{{1}}时,结果将被剪切,其方式部分取决于舍入误差。
*强调补充。