日期:2014-05-20 浏览次数:20972 次
package com.coreJava.multithreading;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Bounce {
public static void main(String[] args){
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame=new BounceFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class BounceFrame extends JFrame{
/**
*
*/
private static final long serialVersionUID = 8985838171214084208L;
private BallComponent comp;
private static final int DEFAULT_WIDTH=450;
private static final int DEFAULT_HEIGHT=350;
private static final int STEPS=1000;
private static final int DELAY=3;
public BounceFrame(){
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
setTitle("Bounce");
comp=new BallComponent();
add(comp,BorderLayout.CENTER);
JPanel buttonPanel=new JPanel();
addButton(buttonPanel, "Start", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
addBall();
}
});
addButton(buttonPanel, "Close", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
}
public void addButton(Container c,String title,ActionListener listener){
JButton button=new JButton(title);
c.add(button);
button.addActionListener(listener);
}
public void addBall(){
Ball ball=new Ball();
comp.add(ball);
for (int i = 1; i <=STEPS; i++) {
ball.move(comp.getBounds());
comp.paint(comp.getGraphics());
try {
Thread.sleep(DELAY);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
package com.coreJava.multithreading;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.ArrayList;
import javax.swing.JPanel;
public class BallComponent extends JPanel{
private ArrayList<Ball> balls=new ArrayList<Ball>();
public void add(Ball b){
balls.add(b);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2=(Graphics2D)g;
for (Ball b : balls) {
g2.fill(b.getShape());
}
}
}
package com.coreJava.multithreading;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
public class Ball {
private static final int XSIZE=15;
private static final int YSIZE=15;
private double x=0;
private double y=0;
private double dx=1;
private double dy=1;
public void move(Rectangle2D bounds){
x+=dx;
y+=dy;
if(x<bounds.getMinX()){
x=bounds.getMaxX();
dx=-dx;
}
if(x+XSIZE>=bounds.getMaxX()){
x=bounds.getMaxX()-XSIZE;
dx=-dx;
}
if(y<bounds.getMinY()){
y=bounds.getMinY();
dy=-dy;
}
if(y+YSIZE>=bounds.getMaxY()){
y=bounds.getMaxY()-YSIZE;
dy=-dy;
}
}
public Ellipse2D getShape(){
return new Ellipse2D.Double(x,y,XSIZE,YSIZE);
}
}