旋转JLabel文本的垂直方向

时间:2013-02-20 19:43:41

标签: java swing

我尝试在基于选定角度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)

Horiztal(360)

垂直(90)

enter image description here

enter image description here

请观察红色圆圈,图像垂直90度并检查。以下是JLabel缺少的顶行和底行。为什么会丢失?

1 个答案:

答案 0 :(得分:2)

回想一下,Graphics指定了以下内容:

  

绘制图形轮廓的操作通过遍历像素之间的无限细路径来操作,像素大小的笔将向下悬挂到右侧 * 路径上的锚点。

当您使用身份转换绘制Rectangle具有getClipBounds()返回的尺寸的Rectangle时,它将被剪裁在右侧和底部。当您使用不同的变换绘制相同的{{1}}时,结果将被剪切,其方式部分取决于舍入误差。

*强调补充。