www.pudn.com > BallThread.rar > BallThread.java


import java.awt.*; 
 
class Ball extends Thread        //小球线程类 
{ 
	private Canvas box; 
	                            //设置小球的大小 
	private static final int XSIZE=10; 
	private static final int YSIZE=10; 
	private int x=0; 
	private int y=0; 
	private int dx=5; 
	private int dy=2; 
	 
	public Ball(Canvas c) 
	{ 
		box=c; 
	}          
	public void draw() 
	{ 
		Graphics g=box.getGraphics(); 
		//x y指小球的位置,XSIZE YSIZE指小球的大小 
		g.fillOval(x,y,XSIZE,YSIZE); 
		g.dispose(); 
	} 
	public void move() 
	{ 
		Graphics g=box.getGraphics(); 
		//取背景的互补色 
		g.setXORMode(box.getBackground()); 
		g.fillOval(x,y,XSIZE,YSIZE); 
		x+=dx; 
		y+=dy; 
		Dimension d=box.size(); 
		//判断小球是否到达边界 
		if(x<0) 
		{ 
			x=0; 
			dx=-dx; 
		} 
		if(x+XSIZE>=d.width) 
		{ 
			//x=d.width-XSIZE; 
			dx=-dx; 
		} 
		if(y<0) 
		{ 
			//y=0; 
			dy=-dy; 
		} 
		if(y+YSIZE>=d.height) 
		{ 
			//y=d.height-YSIZE; 
			dy=-dy; 
		} 
		g.fillOval(x,y,XSIZE,YSIZE); 
		g.dispose(); 
		 
	} 
	public void run() 
	{ 
		draw(); 
		while(true) 
		{ 
			move(); 
			try{Thread.sleep(4);}      //延迟5毫秒 
			catch(InterruptedException e){} 
			 
		} 
	} 
} 
 
 
public class BallThread extends Frame 
{ 
	private Canvas canvas; 
	public BallThread() 
	{                  //设置按钮的位置及名称 
	     setTitle("BallThread"); 
	     canvas=new Canvas(); 
		 add("Center",canvas); 
		 Panel p=new Panel(); 
		 p.add(new Button("Start")); 
		 p.add(new Button("Close")); 
		 add("South",p);	  
	} 
	public boolean handleEvent(Event evt) //接受事件句柄并处理 
	{ 
		if(evt.id==Event.WINDOW_DESTROY) 
		    System.exit(0); 
		return super.handleEvent(evt); 
	} 
	public boolean action(Event evt,Object arg) 
	{ 
		if(arg.equals("Start")) 
		{ 
			Ball b=new Ball(canvas);   //创建Ball线程对象 
			b.start();                 //激活线程 
		} 
		else if(arg.equals("Close")) 
		          System.exit(0); 
		else return super.action(evt,arg); 
		return true; 
	} 
	public static void main(String[] args) 
	{ 
		Frame f=new BallThread(); 
		f.resize(1100,700); 
		f.show(); 
		f.repaint(); 
	} 
}