好玩的小程序,弹弹弹....................
import java.awt.*; import javax.swing.*; import java.awt.event.*; import javax.swing.event.*; public class BallsCanvas extends Canvas implements ActionListener,FocusListener{ private Ball balls[]; private Timer timer;//定时器 private static class Ball{ int x,y; Color color; boolean up,left; Ball(int x,int y,Color color){ this.x=x; this.y=y; this.color=color; } } public BallsCanvas(Color color[],int delay){//指定颜色,延时 this.balls=new Ball[color.length]; for(int i=0,x=40;i<color.length;i++,x+=40) balls[i]=new Ball(x,x,color[i]); this.addFocusListener(this); timer=new Timer(delay,this); timer.start();//定时器启动 } public void setDelay(int delay1){ timer.setDelay(delay1); } public void paint(Graphics g){ for(int i=0;i<balls.length;i++){ g.setColor(balls[i].color); balls[i].x=balls[i].left?balls[i].x-10:balls[i].x+10; if(balls[i].x<=0||balls[i].x>=this.getWidth())//到水平变给变方向 balls[i].left=!balls[i].left; balls[i].y=balls[i].up?balls[i].y-10:balls[i].y+10; if(balls[i].y<=0||balls[i].y>=this.getHeight())//到垂直边更改方向 balls[i].up=!balls[i].up; g.fillOval(balls[i].x, balls[i].y, 20, 20); } } @Override public void focusGained(FocusEvent e) { // TODO Auto-generated method stub timer.stop(); } @Override public void focusLost(FocusEvent e) { // TODO Auto-generated method stub timer.restart(); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub repaint(); } } class BallsJFrame extends JFrame implements ChangeListener{ public BallsCanvas ball; private JSpinner spinner; public BallsJFrame(){ super("弹弹球"); this.setBounds(300,200, 480, 360); this.setDefaultCloseOperation(EXIT_ON_CLOSE); Color colors[]={Color.red,Color.green,Color.blue,Color.magenta,Color.cyan}; ball=new BallsCanvas(colors,100); this.getContentPane().add(ball); JPanel panel=new JPanel(); this.getContentPane().add(panel,"South"); panel.add(new JLabel("Delay")); spinner =new JSpinner(); spinner.setValue(100); panel.add(spinner); spinner.addChangeListener(this); this.setVisible(true); } @Override public void stateChanged(ChangeEvent e) { // TODO Auto-generated method stub ball.setDelay(Integer.parseInt(""+spinner.getValue())); } public static void main(String[] args) { new BallsJFrame(); } }