0

我尝试JLabel根据选定的角度 30、90 等旋转文本。我写了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());   
    } 
}

主.java:

CustomJLabel cst=new CustomJLabel ();
cst.setAngle(value);
cst.repaint();
cst.setSize(getPrefferedsize());

运行上述代码时。它根据角度正确旋转了文本。但它不正确的矩形形状。请检查以下图片。

水平 (360)

水平(360)

垂直 (90)

在此处输入图像描述

在此处输入图像描述

请观察红色圆圈,图像垂直 90 度并检查。这是缺少的顶线和底线JLabel。为什么它不见了?

4

1 回答 1

2

召回Graphics指定以下内容:

绘制图形轮廓的操作通过使用像素大小的笔穿过像素之间的无限细路径进行操作,该笔垂下并位于路径上锚点的右侧 * 。

当您绘制一个使用恒等变换Rectangle返回的尺寸getClipBounds()时,它将在右侧和底部被剪裁。当您使用不同的变换绘制相同Rectangle的内容时,结果将以部分取决于舍入误差的方式被裁剪。

* 强调添加。

于 2013-02-20T22:03:55.167 回答