TimerBasedAnimation.java Source code

Java tutorial

Introduction

Here is the source code for TimerBasedAnimation.java

Source

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Ellipse2D;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;

public class TimerBasedAnimation extends JPanel implements ActionListener {
    private Ellipse2D.Float ellipse = new Ellipse2D.Float();

    private double esize;

    private double maxSize = 0;

    private boolean initialize = true;

    Timer timer;

    ActionListener updateProBar;

    public TimerBasedAnimation() {
        setXY(20 * Math.random(), 200, 200);

        timer = new Timer(20, this);
        timer.setInitialDelay(190);
        timer.start();
    }

    public void setXY(double size, int w, int h) {
        esize = size;
        ellipse.setFrame(10, 10, size, size);
    }

    public void reset(int w, int h) {
        maxSize = w / 10;
        setXY(maxSize * Math.random(), w, h);
    }

    public void step(int w, int h) {
        esize++;
        if (esize > maxSize) {
            setXY(1, w, h);
        } else {
            ellipse.setFrame(ellipse.getX(), ellipse.getY(), esize, esize);
        }
    }

    public void render(int w, int h, Graphics2D g2) {
        g2.setColor(Color.BLUE);
        g2.draw(ellipse);
    }

    public void paint(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;

        RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        rh.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);

        g2.setRenderingHints(rh);
        Dimension size = getSize();

        if (initialize) {
            reset(size.width, size.height);
            initialize = false;
        }
        this.step(size.width, size.height);
        render(size.width, size.height, g2);
    }

    public void actionPerformed(ActionEvent e) {
        repaint();
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("TimerBasedAnimation");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new TimerBasedAnimation());
        frame.setSize(350, 250);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}