import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;

public class Panel2 extends JPanel implements ActionListener, ChangeListener {
    
    protected static final int DEFAULT_FPS = 30;
    BufferedImage background, foreground;
    int backwidth, backheight;
    int rocketwidth, rocketheight, rocketx, rockety;
    javax.swing.Timer ticker;

    public Panel2(int rate) {
	int delay = 1000/rate;
	String fs = File.separator;
	Image backImage = new ImageIcon("images"+fs+"starfield.gif").getImage();
	backwidth = backImage.getWidth(this);
	backheight = backImage.getHeight(this);
	background = new BufferedImage(backwidth, backheight,BufferedImage.TYPE_4BYTE_ABGR);
	background.getGraphics().drawImage(backImage,0,0,this);
	Image foreImage = new ImageIcon("images"+fs+"rocketship.gif").getImage();
	rocketwidth = foreImage.getWidth(this);
	rocketheight = foreImage.getHeight(this);
	foreground = new BufferedImage(rocketwidth,rocketheight,BufferedImage.TYPE_4BYTE_ABGR);
	foreground.getGraphics().drawImage(foreImage,0,0,this);
	ticker = new javax.swing.Timer(delay, this);
	ticker.start();
	setPreferredSize(new Dimension(backwidth,backheight));
	rockety = (backheight - rocketheight)/2;
	rocketx = -rocketwidth;
	System.out.println(backwidth);
    }
    
    public void paintComponent(Graphics g) {
	g.drawImage(background,0,0,this);
	g.drawImage(foreground,rocketx,rockety,this);
    }
    
    public void actionPerformed(ActionEvent e) {
	rocketx+=1;
	if (rocketx > backwidth)
	    rocketx = -rocketwidth;
	repaint();
	// System.out.println("Tick");
    }
        
    public void stateChanged(ChangeEvent e) {
	JSlider source = (JSlider)e.getSource();
	if (!source.getValueIsAdjusting()) {
	    int fps = (int)source.getValue();
	    int delay = 1000 / fps;
	    ticker.setDelay(delay);
	}
    }

    public static void main(String[] args) {
	JFrame f = new JFrame("Panel2 animation demo");
	f.getContentPane().setLayout(new BorderLayout());
	Panel2 p = new Panel2(DEFAULT_FPS);
	f.getContentPane().add(p,BorderLayout.CENTER);
	JPanel p2 = new JPanel();
	f.getContentPane().add(p2,BorderLayout.SOUTH);
	JSlider fpsSlider = new JSlider(JSlider.HORIZONTAL,0,100,DEFAULT_FPS);
	fpsSlider.setMajorTickSpacing(10);
	fpsSlider.setPaintTicks(true);
	fpsSlider.setPaintLabels(true);
	fpsSlider.addChangeListener(p);
	p2.add(fpsSlider);
	f.pack();
	f.setVisible(true);
	f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
