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());   
    } 
}

Main.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 に答える