Java动画旋转

Java动画旋转,java,swing,awt,Java,Swing,Awt,我几乎没有Java方面的经验,而且我是一名业余程序员。所以注意我的词汇量 我希望能够将静态矩形粘贴到旋转矩形的顶部。 到目前为止,当我尝试添加另一个对象时,它会与另一个图像一起旋转。我尝试过将旋转设置为零,但似乎不起作用。我还尝试创建另一个类,分别绘制组件,并使用frame.add将它们添加到框架中。我还尝试为Draw类创建另一个对GUI没有影响的部分。这是我目前的绘画课。感谢您的帮助 class DrawRectangle extends JPanel { @Override

我几乎没有Java方面的经验,而且我是一名业余程序员。所以注意我的词汇量

我希望能够将静态矩形粘贴到旋转矩形的顶部。 到目前为止,当我尝试添加另一个对象时,它会与另一个图像一起旋转。我尝试过将旋转设置为零,但似乎不起作用。我还尝试创建另一个类,分别绘制组件,并使用frame.add将它们添加到框架中。我还尝试为Draw类创建另一个对GUI没有影响的部分。这是我目前的绘画课。感谢您的帮助

class DrawRectangle extends JPanel {

    @Override
    public void paintComponent(Graphics g) {
        int h = this.getHeight();
        int w = this.getWidth();
        Graphics2D g2 = (Graphics2D) g;

        //draw background
        g2.setColor(Color.WHITE);
        g2.fillRect(0, 0, w, h);

        //draw roatiing rectangle
        g2.setColor(Color.CYAN);
        Rectangle rRec = new Rectangle(w / 4, h / 4, 2 * w / 4, 2 * h / 4);
        double wr = rRec.getX() + rRec.getWidth() / 2;
        double hr = rRec.getY() + rRec.getHeight() / 2;
        g2.rotate(Math.toRadians(count), wr, hr);
        g2.fill(rRec);
        g2.fillRect(w / 3, h / 3, 2 * w / 3, 2 * h / 3);
    }

    public void paintComponent2(Graphics g) {
        int h = this.getHeight();
        int w = this.getWidth();
        Graphics2D g2 = (Graphics2D) g;

    }
} 
移动
g2.fill(rRec)rotate
之前,code>应该可以工作(我刚刚测试过)

这样,您将在旋转之前绘制静态矩形,执行旋转,然后绘制第二个矩形。假设您的
count
变量在某个地方递增,它应该显示正在旋转的第二个矩形。

移动您的
g2.fill(rRec)rotate
之前,code>应该可以工作(我刚刚测试过)

这样,您将在旋转之前绘制静态矩形,执行旋转,然后绘制第二个矩形。假设您的
count
变量在某个地方递增,它应该显示正在旋转的第二个矩形

到目前为止,当我尝试添加另一个对象时,它会与另一个图像一起旋转

创建一个单独的图形对象进行旋转,这样就不会影响传递到绘制方法中的图形对象的属性:

//Graphics2D g2 = (Graphics2D) g;
Graphics2D g2 = (Graphics2D)g.create();

//  painting code

g2.dispose();
到目前为止,当我尝试添加另一个对象时,它会与另一个图像一起旋转

创建一个单独的图形对象进行旋转,这样就不会影响传递到绘制方法中的图形对象的属性:

//Graphics2D g2 = (Graphics2D) g;
Graphics2D g2 = (Graphics2D)g.create();

//  painting code

g2.dispose();

答案是正确的,但请注意,您也可以通过最初获取旧变换(
AffineTransform old=g2.getTransform();
)然后重置它来重置旋转。(
g2.setTransform(旧版);
);-这在以后的项目中很有用,但在这种情况下不需要。顺便说一句,不要忘记调用
super.paintComponent(g)
。答案是正确的,但请注意,您也可以通过最初获取旧变换(
AffineTransform old=g2.getTransform();
)然后重置它来重置旋转。(
g2.setTransform(旧版);
);-这在以后的项目中很有用,但在这种情况下不需要。顺便说一句,不要忘记调用
super.paintComponent(g)