Java tutorial
import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics2D; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.Timer; public class Main { public static void main(String[] args) { Runnable r = new Runnable() { @Override public void run() { JPanel gui = new JPanel(); final AnimatedImage[] tiles = new AnimatedImage[2]; for (int ii = 0; ii < tiles.length; ii++) { tiles[ii] = new AnimatedImage(); gui.add(new JLabel(new ImageIcon(tiles[ii]))); } ActionListener listener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { for (int i = 0; i < tiles.length; i++) { tiles[i].paintImage(); gui.repaint(); } } }; Timer timer = new Timer(50, listener); timer.start(); JOptionPane.showMessageDialog(null, gui); timer.stop(); } }; SwingUtilities.invokeLater(r); } } class AnimatedImage extends BufferedImage { GradientPaint[] frameGradient; int frame = 0; AnimatedImage() { super(60, 60, BufferedImage.TYPE_INT_RGB); frameGradient = new GradientPaint[6]; for (int i = 0; i < frameGradient.length; i++) { frameGradient[i] = new GradientPaint(0f, (float) i, Color.BLUE, 0f, (float) i + 13, Color.RED, true); } } public void paintImage() { Graphics2D g = createGraphics(); if (frame == frameGradient.length - 1) frame = 0; else frame++; g.setPaint(frameGradient[frame]); g.fillRect(0, 0, getWidth(), getHeight()); g.dispose(); } }