JAVA 多线程 经典实例-弹跳小球
2008-10-12 21:04
357 查看
import java.awt.*;
import java.lang.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class BallGame extends JFrame implements ActionListener
{
JButton jbtStart = new JButton("Start");
JButton jbtStop = new JButton("Stop");
MainPanel mp = new MainPanel();
public BallGame()
{
this.getContentPane().add(mp,BorderLayout.CENTER);
mp.setBackground(Color.white);
JPanel p=new JPanel();
p.add(jbtStart);
p.add(jbtStop);
this.getContentPane().add(p,BorderLayout.SOUTH);
jbtStart.addActionListener(this);
jbtStop.addActionListener(this);
}
public static void main(String[] args)
{
BallGame bt = new BallGame();
bt.setSize(300,300);
bt.setVisible(true);
bt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==jbtStart)
{
BallThread b=new BallThread(mp);
mp.balls.addElement(b);
b.start();
}
else
{
System.exit(0);
}
}
}
class MainPanel extends Panel
{
public Vector balls=new Vector();
public void paint(Graphics g)
{
for(int i=0;i<balls.size();i++)
{
BallThread ball = (BallThread)balls.elementAt(i);
ball.draw();
}
}
}
class BallThread extends Thread
{
MainPanel mainPanel;
private static final int XSIZE=20;
private static final int YSIZE=20;
private int x=0;
private int y=0;
private int dx=2;
private int dy=2;
public BallThread(MainPanel b)
{
mainPanel=b;
}
public void draw()
{
Graphics g=mainPanel.getGraphics();
g.fillOval(x,y,XSIZE,YSIZE);
g.dispose();
}
public void move()
{
x+=dx;
y+=dy;
Dimension d=mainPanel.getSize();
if(x<0){x=0;dx=-dx;}
if(y<0){y=0;dy=-dy;}
if(x+XSIZE>=d.width ) {x=d.width -XSIZE;dx=-dx;}
if(y+YSIZE>=d.height ) {y=d.height -YSIZE;dy=-dy;}
mainPanel.repaint();
}
public void run()
{
try
{
draw();
while(true)
{
move();
sleep(30);
}
}catch(Exception e){ }
}
}
import java.lang.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class BallGame extends JFrame implements ActionListener
{
JButton jbtStart = new JButton("Start");
JButton jbtStop = new JButton("Stop");
MainPanel mp = new MainPanel();
public BallGame()
{
this.getContentPane().add(mp,BorderLayout.CENTER);
mp.setBackground(Color.white);
JPanel p=new JPanel();
p.add(jbtStart);
p.add(jbtStop);
this.getContentPane().add(p,BorderLayout.SOUTH);
jbtStart.addActionListener(this);
jbtStop.addActionListener(this);
}
public static void main(String[] args)
{
BallGame bt = new BallGame();
bt.setSize(300,300);
bt.setVisible(true);
bt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==jbtStart)
{
BallThread b=new BallThread(mp);
mp.balls.addElement(b);
b.start();
}
else
{
System.exit(0);
}
}
}
class MainPanel extends Panel
{
public Vector balls=new Vector();
public void paint(Graphics g)
{
for(int i=0;i<balls.size();i++)
{
BallThread ball = (BallThread)balls.elementAt(i);
ball.draw();
}
}
}
class BallThread extends Thread
{
MainPanel mainPanel;
private static final int XSIZE=20;
private static final int YSIZE=20;
private int x=0;
private int y=0;
private int dx=2;
private int dy=2;
public BallThread(MainPanel b)
{
mainPanel=b;
}
public void draw()
{
Graphics g=mainPanel.getGraphics();
g.fillOval(x,y,XSIZE,YSIZE);
g.dispose();
}
public void move()
{
x+=dx;
y+=dy;
Dimension d=mainPanel.getSize();
if(x<0){x=0;dx=-dx;}
if(y<0){y=0;dy=-dy;}
if(x+XSIZE>=d.width ) {x=d.width -XSIZE;dx=-dx;}
if(y+YSIZE>=d.height ) {y=d.height -YSIZE;dy=-dy;}
mainPanel.repaint();
}
public void run()
{
try
{
draw();
while(true)
{
move();
sleep(30);
}
}catch(Exception e){ }
}
}
相关文章推荐
- JAVA多线程学习初步经典实例
- java多线程交互 经典实例__生产者与消费者模型
- 经典多线程Java实例 生产者与消费者
- java多线程经典实例
- 黑马程序员__java多线程总结(含经典实例!)
- Java语言多线程终止中的守护线程实例
- Java经典设计模式之七大结构型模式(附实例和详解)
- 22个Java经典实例 带完美注释
- 自动化测试中java多线程的使用实例
- 经典java socket 长连接实例
- Java实现多线程经典问题:使用三个线程实现输出ABCABC循环
- JAVA多线程之——经典面试消费者与生产者
- JAVA多线程之——经典面试消费者与生产者
- Java多线程实现扑克牌发牌程序实例
- java多线程之生产者消费者经典问题
- Java 多线程ServerSocket通讯简单实例(基于TCP协议)
- Java反射经典实例
- java代码-------多线程实例
- Java经典编程300例之实例063 使用Comparable接口自定义排序
- java反射经典实例