线程的综合练习(气泡的绘制)
关于气泡的操作总共有5个:
增加气泡,让气泡同时暂停,让气泡同时开始运动,点按钮随时消失一个气泡,点气泡让点到的气泡消失。
需要考虑的方面还有气泡立体感的绘制,在链表队列中对线程进行操作。
这次把每个气泡放在了不同的画布内,可以防止出现都在一个画布内互相影响出现错误的情况。
思路有两种:
1.主函数每次把新建的画布传给按钮监听器,监听器把画布传给线程。
2.主函数每次把面板传给监听器,在监听器里创建新画布,传给线程。
气泡移动的绘制和之前的小球都一样,暂停的控制也基本一致,这里不再说了。
引入了链表队列对线程进行管理。
增加的时候动用链表队列的INSERT操作把新的线程加入队列中。
Graphics g=JP.getGraphics();
Printthread p1=new Printthread(JP,g);
BallList.add(p1);
p1.start();
随机消失时产生一个随机数,动用REMOVE操作把小球移除。终止线程,再把小球目前所在的位置擦干净。
Random rand=new Random();
int index=rand.nextInt(BallList.count);
LinkNode node=BallList.get(index);
Printthread p=(Printthread) node.data;
p.clear();
p.stop();
BallList.remove(index);
点到气泡让它消失的写法:
创建一个鼠标监听器,点击鼠标时获取坐标。遍历整个队列,把每个气泡的角落的点的坐标和鼠标点击的位置作对比。求两点间距离,把它和小球的半径对比。如果小于等于半径,则终止这个线程,删除它在链表中的位置,擦干净小球所在的位置。