/*
* Created on 2005-3-20
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
/**
* @author pingping
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;
public class Bounce {
public static void main(String[] args)
{
JFrame frame = new BounceFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
class BounceFrame extends JFrame
{
public BounceFrame()
{
setTitle("Bounce...");
setSize(400,450);
canvas = new BallCanvas();
Container contain = getContentPane();
contain.add(canvas,BorderLayout.CENTER);
JPanel buttonpanel = new JPanel();
addButton(buttonpanel,"start",new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
addBall(Thread.NORM_PRIORITY,Color.black);
}
});
addButton(buttonpanel,"express",new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
addBall(Thread.NORM_PRIORITY+2,Color.red);
}
});
/*addButton(buttonpanel,"selfish",new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
addBall(Thread.NORM_PRIORITY+2,Color.red);
}
});*/
addButton(buttonpanel,"stop",new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
System.exit(0);
}
});
contain.add(buttonpanel,BorderLayout.SOUTH);
}
public void addButton(Container c,String name,ActionListener listener)
{
JButton button = new JButton(name);
button.addActionListener(listener);
c.add(button);
}
public void addBall(int priority,Color color)
{
Ball b = new Ball(canvas,color);
canvas.add(b);
BallThread thread = new BallThread(b);
thread.setPriority(priority);
thread.start();
}
private BallCanvas canvas;
}
/*A Thread make ball move...*/
class BallThread extends Thread
{
public BallThread(Ball aball)
{ ball = aball; }
public void run()
{
try
{
for(int i=1;i<=10000;i++)
{
ball.move();
sleep(5);
}
}
catch (InterruptedException e)
{
Thread.currentThread().interrupt();
}
}
private Ball ball;
}
/*draw the ball*/
class BallCanvas extends JPanel
{
public void add(Ball b)
{
balls.add(b);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
for(int i=0;i{
Ball b = (Ball)balls.get(i);
b.drawBall(g2);
}
}
private ArrayList balls = new ArrayList();
}
class Ball
{
public Ball(Component c,Color color)
{
canvas = c;
acolor = color;
}
public void drawBall(Graphics2D g2)
{
g2.setColor(acolor);