Mega Code Archive

 
Categories / Java / 2D Graphics GUI
 

Timer based animation

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