源码如下:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Bounce extends Applet implements Runnable
{
BallControls ballControls;
BallCanvas ballCanvas;
Thread BounceThread;
public void start()
{
if(BounceThread==null)
{
BounceThread=new Thread(this);
BounceThread.start();
}
}
public void init()
{
setLayout(new BorderLayout());
ballCanvas=new BallCanvas();
add("Center",ballCanvas);
add("South",ballControls=new BallControls(ballCanvas));
}
public void run()
{
Thread.currentThread().setPriority(Thread.NORM_PRIORITY);
while(true)
{
if(ballControls.mContinue)
ballCanvas.moveBall(ballControls.moveangle);
try
{
Thread.sleep(40);
}
catch(Exception err)
{
}
}
}
}
class BallCanvas extends Canvas
{
public int ballX=150;
public int ballY=50;
public int ballXoffset;
public int ballYoffset;
boolean Sign=true;
public int radiusXY=5;
private final int rectWL=30;
private final int radius=(int)Math.round(rectWL/(2*Math.sin(45*Math.PI/180)));
private final int RectSpace=10;
int Rectright,Rectbottom;
public void paint(Graphics g)
{
Dimension bound=getPreferredSize();
Rectright=bound.width-20;
Rectbottom=bound.height-20;
g.setColor(Color.black);
g.drawRect(RectSpace,RectSpace,Rectright,Rectbottom);
g.setXORMode(getBackground());
g.fillOval(ballX,ballY,rectWL,rectWL);
}
public void moveBall(int moveangle)
{
if(Sign)
{
ballXoffset=(int)Math.round(radiusXY*Math.cos(moveangle*Math.PI/180));
ballYoffset=(int)Math.round(radiusXY*Math.sin(moveangle*Math.PI/180));
}
ballX=ballXoffset+ballX;
if(ballX>=(Rectright-radius))
{
ballXoffset=-ballXoffset;
ballX=Rectright-radius;
Sign=false;
}
if(ballX<=RectSpace)
{
ballXoffset=-ballXoffset;
ballX=RectSpace;
Sign=false;
}
ballY=ballYoffset+ballY;
if(ballY>=(Rectbottom-radius))
{
Sign=false;
ballYoffset=-ballYoffset;
ballY=Rectbottom-radius;
}
if(ballY<=RectSpace)
{
Sign=false;
ballYoffset=-ballYoffset;
ballY=RectSpace;
}
repaint();
}
}
class BallControls extends Panel implements ActionListener
{
public TextField angleField;
public int moveangle;
public boolean mContinue=false;
BallCanvas canvas1;
public BallControls(BallCanvas canvas2)
{
Button btn=null;
this.canvas1=canvas2;
Label angleLabel=new Label("dffksd");
add(angleLabel);
angleField=new TextField("45",3);
add(angleField);
btn=new Button("begin");
btn.addActionListener(this);
add(btn);
}
public void actionPerformed(ActionEvent ev)
{
String str=ev.getActionCommand();
if(str.equals("begin"))
{
mContinue=true;
moveangle=Integer.parseInt(angleField.getText().trim());
canvas1.moveBall(moveangle);
}
}
}