import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Neve extends JFrame 
{	class NevePanel extends JPanel 
	{ private int h, w;
		private int fi[];
		void inizializza()
		{	w = getWidth();
			h = getHeight();		
			fi = new int[h];
			for(int i=0; i<h; i++)
				fi[i] = (int)(Math.random()*w);
		}
		void trasla()
		{	for(int i=h-1; i>0; i--)
				fi[i] = fi[i-1];
			fi[0] = (int)(Math.random()*w);
		}
		public void paintComponent(Graphics g)
		{	super.paintComponent(g);
			for(int i=0; i<h; i++)
				g.drawString("*", fi[i], i);
		}
	}
	private final int WAIT = 30;
	private NevePanel p = new NevePanel();
	private Timer t;
	private Traslatore tras;
	public class Traslatore implements ActionListener 
	{	public void actionPerformed(ActionEvent e)
		{	p.trasla();
			p.repaint();
		}
	}
	Neve(int x, int y)
	{	super("Neve");
		setSize(x, y);
		setResizable(false);
		p.setBackground(Color.black);
		p.setForeground(Color.white);
		p.setOpaque(true);
		getContentPane().add(p);
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		tras = new Traslatore();
		t = new Timer(WAIT, tras);
	}
	void vai()
	{	p.inizializza();
		t.start();
	}
	void ferma()
	{	t.stop();
	}		
}

public class ProvaNeve
{	public static void main(String[] args) 
	{ Neve neve = new Neve(400, 400); 
		neve.setVisible(true);
		neve.vai();
		try { Thread.sleep(10000); }
		catch (InterruptedException e) { }
		neve.ferma();
	}
}
