如何使用计时器来停止/启动动画?

时间:2016-02-20 11:57:33

标签: java swing

我正在尝试创建一个按给定参数影响动画的类。 像这个Rotate r = new Rotate(250),但我不能正确使用计时器,我知道有类似的问题,但无论如何我无法解决问题。我可以旋转,但不能确定何时停止。这是基本代码:

public class Rotate   extends JPanel  {

    public Rotate(int angle){

    }

    @Override
    public void paintComponent(Graphics g ) {

        int drawLocationX = 55;
        int drawLocationY = 111;
        BufferedImage image = LoadImage("cutted.png");
        AffineTransform at = AffineTransform.getTranslateInstance(drawLocationX,drawLocationY);
        at.rotate(angle, image.getWidth()/2, image.getHeight()/2);

        Graphics2D g2d = (Graphics2D) g;
        g2d.drawImage(image, at, null);

        revalidate();
        repaint();      
    }

    BufferedImage LoadImage (String FileName){
        BufferedImage img = null;
        try{
            img = ImageIO.read(new File(FileName));
        }
        catch(IOException e){

        }
        return img;
    }   
}

1 个答案:

答案 0 :(得分:1)

从不:

  1. 以绘画方式阅读图像。每次要绘制组件时读取图像效率都很低。读取类的构造函数中的图像,并将图像保存为实例变量。

  2. 在绘画方法中调用revalidate()或repaint()。这将导致无限循环。

  3.   

    我正在尝试创建一个影响动画的类

    然后你需要使用Swing Timer来安排动画。当计时器触发时,您需要更改角度。所以在你的课堂上你可能需要添加一些方法,比如getAngle()和setAngle(...)。

    setAngle()可能如下所示:

    public void setAngle(int angle)
    {
        this.angle = angle;
        repaint();
    }
    

    因此,当Timer触发时,您只需调用:

    myPanel.setAngle( myPanel.getAngle() + 1 );
    
      

    但无法确定何时停止

    不知道这对你意味着什么。你想在360度或旋转后停下来吗?然后你需要在Timer代码中保留一个计数器,以便在它激发360次后停止该计时器。