import java.applet.*; 
import java.awt.*; 
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

//*******************************************************
//*                                                     *
//*     Autor: Dieter Bollinger, Stuttgart, Germany     *
//*                                                     *
//*******************************************************

public class helloworld2 extends Applet implements Runnable, MouseListener, MouseMotionListener
{ 
	private String str = "Java Applet - Hello World !";	
	private Image			m_imageworld = null;
   	private	MediaTracker	m_tracker = null;
   	private Image			m_Image = null;			
   	private Graphics		m_g = null;				
   	private int				m_number = 0;
	private Thread			m_runnable = null;
	private String			m_version = "";
	private Point			m_p = new Point(0,0);
	
   	public void init() {
		m_version = "Java-Version: " + System.getProperty( "java.version");
		m_Image = createImage(300, 200);
        	m_g = m_Image.getGraphics();
   		m_imageworld = getImage(getCodeBase(), "earthjava.gif");
		m_tracker = new MediaTracker(this);
		m_tracker.addImage(m_imageworld, 1);
		try {m_tracker.waitForID(1); } 
		catch (InterruptedException e) { }	
		m_tracker.removeImage(m_imageworld, 1);
		addMouseListener(this);
		addMouseMotionListener(this);
	}
	
	public void mouseClicked(MouseEvent me) { }

	public void mouseEntered(MouseEvent me) { }

	public void mouseExited(MouseEvent me) { }

	public void mousePressed(MouseEvent me) {
		if(this.m_runnable == null)
			startrunnable();
		else
			stoprunnable();
	}
	
	public void mouseReleased(MouseEvent me) { }

	public void mouseMoved(MouseEvent me) {
		m_p = me.getPoint();
		repaint();	
	}
	
	public void mouseDragged(MouseEvent me) {
    }
	
	public void update(Graphics g) {
		m_g.setFont( new Font("sanserif", Font.BOLD, 12));
		FontMetrics fm = m_g.getFontMetrics();
		m_g.setColor(Color.black);  
		m_g.fillRect(0,0,300,200); 	  
		m_g.drawImage(m_imageworld, 92, 48, 208, 152, m_number*116, 0, (m_number*116)+116, 104, null);
		m_g.setColor(Color.white);  
		m_g.drawString(str,(300-Math.max(0, fm.stringWidth(str)))/2, 30); 
		m_g.drawString(m_version,(300-Math.max(0, fm.stringWidth(m_version)))/2, 175); 
		m_g.setColor(Color.red);  
		if(this.m_runnable == null) {
			m_g.setColor(Color.green);  
			m_g.drawString("Start",(m_p.x>270?270:m_p.x), (m_p.y<15?15:m_p.y)); 
		} else {
			m_g.setColor(Color.red);  
			m_g.drawString("Stop",(m_p.x>270?270:m_p.x), (m_p.y<15?15:m_p.y)); 
		}	
		paint(g);
	}
		
	public void paint(Graphics g) { 
   		g.drawImage(m_Image,0, 0, null );
	} 

	public void start() {
		setCursor(new Cursor(Cursor.HAND_CURSOR));
		startrunnable();
		m_number = 0;
    }

    public void stop() {
		stoprunnable();
		m_Image	= null;
		m_g = null;
    }

	public void startrunnable() {
		if(this.m_runnable == null) {
			this.m_runnable = new Thread(this);
            this.m_runnable.start();
	}}
   
	public void stoprunnable() {
        if(this.m_runnable != null) {
            this.m_runnable.interrupt();
            this.m_runnable = null;
			repaint();	
	}}
    
	public void run() {
		try {
			while(true) {	
				this.m_runnable.sleep(150);
				if(m_number < 19)
					++m_number;
				else
					m_number = 0;
				repaint();		
			}		
		}
		catch (Exception e) {}
	}
} 

