模拟弹子台球--java多线程应用
2011-09-16 15:39
691 查看
运行效果:
代码如下:
Marbles.java
Table.java
代码如下:
Marbles.java
package MarblesThread; import java.awt.Color; import java.awt.Graphics; public class Marbles implements Runnable{ public Marbles(){ } public Marbles(int startx, int starty, int xdir, int ydir, Table table){ this.table = table; this.startX = startx; this.startY = starty; this.xDir = xdir; this.yDir = ydir; } @Override public void run(){ while(true){ if((startX > table.getSize().width - 25) || (startX < 0)){ xDir *= -1; } if((startY > table.getSize().width - 25) || (startY < 0)){ yDir *= -1; } startX += xDir; startY += yDir; try{ Thread.sleep(1000); }catch(Exception e){ e.printStackTrace(); } table.repaint(); } } public void draw(Graphics g){ g.setColor(Color.black); g.fillOval(startX, startY, 30, 30); g.setColor(Color.white); g.fillOval(startX + 5, startY + 5, 8, 6); } Table table = null; int startX, startY; int xDir, yDir; }
Table.java
package MarblesThread; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class Table extends JFrame implements ActionListener{ public Table(){ panel.add(startButton); startButton.addActionListener(this); setContentPane(panel); setSize(400, 500); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); addWindowListener(new WindowAdapter(){ @Override public void windowClosing(WindowEvent e){ System.exit(0); } }); } public static void main(String[] args){ new Table(); } private final JButton startButton = new JButton("开始"); JPanel panel = new JPanel(); Marbles[] marbles = new Marbles[10]; private final int speedMin = 2; @Override public void actionPerformed(ActionEvent e){ for(int i = 0; i < marbles.length; i++){ int xDir = (int) (Math.random() * 10 + speedMin); int yDir = (int) (Math.random() * 10 + speedMin); int startX = (int) (Math.random() * getSize().width); int startY = (int) (Math.random() * getSize().height); marbles[i] = new Marbles(startX, startY, xDir, yDir, this); new Thread(marbles[i]).start(); } } @Override public void paint(Graphics g){ super.paint(g); for(int i = 0; i < marbles.length; i++){ if(marbles[i] != null){ marbles[i].draw(g); } } } }
相关文章推荐
- 模拟弹子台球--java多线程应用
- (学习java)模拟用户登录
- java 随机数 模拟双色球开奖
- java swing实现页面置换算法模拟系统代码
- JAVA编写的使用Socket模拟Http的GET操作
- java多线程模拟2个窗口同时卖车票100张
- Java中如何模拟真正的同时并发请求?
- java模拟电梯运行简单实现,swing界面
- 在C++中模拟Java中final对虚函数的使用
- 利用Java反射模拟一个Struts框架
- Java模拟网站登录02【转载】
- Java界面编程实战之模拟扫雷
- JAVA-用HttpClient来模拟浏览器GET,POST
- CCF计算机软件能力认证模拟试题-ISBN号码(Java参考答案学习记录)
- 在JAVA语言里模拟“宏”
- java编程:设计一个动物声音“模拟器”,希望模拟器可以模拟许多动物的叫声
- java 栈和队列的模拟--java
- 模拟游客一天的生活与旅游java程序代写源码
- Java爬虫(二)-- httpClient模拟Http请求+jsoup页面解析
- Java写的一个计算器模拟小程序