相信大家都对屏幕保护中的小球碰撞动画深有印象吧,许多色彩缤纷的小球在屏幕上滚动,碰撞,然后一直重复如此过程......现在就让我们自己尝试去做一下吧,或许你做的比它的要更好呦!
不必说,最重要也是最先弄的,自然是要产生小球啦,因此就要先创建一个球的线程类。这里先放上一些关于线程创建的知识,有助于大家巩固记忆啦。
线程的创建有两种方式,分别为继承Thread类(已经实现了Runnable接口)与实现Runnable接口。
1.Thread类
常用方法包括:start()、interrupt()、join()、run()方法等。start()方法用于启动线程,run()方法为线程实现功能的方法,可以根据需求覆写run()方法。
构造函数8个,常用4个:
Thread thread=new Thread(); //无参的Thread类构造函数
Thread thread=new Thread(Runnable simple); //参数为实现Runnable接口类对象的构造函数
Thread thread=new Thread("ThreadName"); //参数为线程名称的构造函数
Thread thread=new Thread(Runnable simple,"ThreadName"); //无参的Thread类构造函数
2.Runnable接口
它只有一个方法就是run()方法,实现Runnable()接口后必须覆写run()方法。
嗯,如上所说,先创建一个球的线程类:
import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.util.Random; import javax.swing.JPanel; public class MyThread extends Thread{ private JPanel panel; private int x,y;//坐标位置 private int radius=50;//球半径 private int vx,vy;//横纵坐标该变量 private Color color; public MyThread(JPanel panel) { this.panel=panel; Random random=new Random();//创建一个随机类变量 vx=random.nextInt(20)+10; vy=random.nextInt(10)+5; radius=random.nextInt(10)+20; color=new Color(random.nextInt(256),random.nextInt(256),random.nextInt(256)); } //重写run的方法 public void run() { Random random=new Random(); //Graphics g=panel.getGraphics();//获得窗体界面 Graphics2D g2=(Graphics2D)panel.getGraphics(); panel.setBackground(Color.BLACK); while(true) { try{ Thread.sleep(100);//调用线程睡眠方法,让线程能暂缓进行 }catch(InterruptedException e ){ e.printStackTrace(); } //覆盖小球先前的轨迹 g2.setColor(panel.getBackground());//获得窗体背景颜色 g2.fillOval(x, y, 2*radius, 2*radius); x+=vx; y+=vy; g2.setColor(color); g2.fillOval(x, y, 2*radius, 2*radius); //若小球碰撞到面板边缘,则反弹 if(x<0||x>panel.getWidth()-2*radius) { vx=-vx; } if(y<0||y>panel.getHeight()-2*radius) { vy=-vy; } } } }
这里大概要注意两点吧:
1.要覆盖小球先前的轨迹,不然所有时刻的轨迹都会显现在窗体上。
2.考虑小球出界时的情况,设定反弹条件
之后当然就是写一个测试类
import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class TestFrame { private JPanel centerpanel; /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub TestFrame tf=new TestFrame(); tf.init(); } //初始化界面的方法 public void init() { JFrame jf=new JFrame("线程入门"); jf.setSize(800, 600); jf.setDefaultCloseOperation(3); jf.setResizable(false); JPanel northpanel=new JPanel(); northpanel.setSize(800, 200); JButton jbu=new JButton("开始"); //jbu.setPreferredSize(new Dimension(50,50)); jbu.addActionListener(al); northpanel.add(jbu); jf.add(northpanel,BorderLayout.NORTH); centerpanel=new JPanel(); jf.add(centerpanel,BorderLayout.CENTER); jf.setVisible(true); } ActionListener al=new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { MyThread thread=new MyThread(centerpanel);//创建一个线程 thread.start();//启动线程 }}; }
提醒下的是,最好创建两个面板,北边面板放按钮,中间面板当画布,这里小球运动时就不会影响到按钮的轮廓。
这样操作完后,就能产生许许多多的小球啦。
相关推荐
通过JAVA运用多线程控制球的运动,通过窗口中的滑条,对球的大小和颜色进行选择后,随机从窗口左右两方择一进入,小球在遇到障碍或边界后会折回。
Java 第二阶段提升编程能力【线程(基础)】---- 代码 Java 第二阶段提升编程能力【线程(基础)】---- 代码 Java 第二阶段提升编程能力【线程(基础)】---- 代码 Java 第二阶段提升编程能力【线程(基础)】---- ...
当用户点击一个按钮时如果执行的是一个常耗时操作的话,处理不好会导致系统假死,用户体验很差,而Android则更进一步,如果任意一个Acitivity没有响应5秒钟以上就会被强制关闭,因此我们需要另外起动一个线程来处理...
.......................................JAVA线程、线程池资料----下载不扣分,回帖加1分,欢迎下载,童叟无欺JAVA线程、线程池资料----下载不扣分,回帖加1分,欢迎下载,童叟无欺JAVA线程、线程池资料----下载不...
vc++ 多线程教程---线程通信--利用事件对象,线程同步--使用信号量,线程同步--使用互斥量,线程同步--使用临界区
java 线程 动画
使用到了多线程,小球不断摇摆,其余小球与之相互碰撞,方向,速度,方向,球的颜色都随之改变,java代码实现
NULL 博文链接:https://479001499.iteye.com/blog/2092900
JAVA多线程实验,字符移动、小球碰撞两个实验来说明JAVA的多线程
一个线程捕获另外一个线程的异常1---马克-to-win java视频
C++多线程一步步编程C++多线程一步步编程---多线程
多线程 小球运行程序 (eclipse工程可导入)
Java多线程与线程安全实践-基于Http协议的断点续传 Java多线程与线程安全实践-基于Http协议的断点续传 Java多线程与线程安全实践-基于Http协议的断点续传 Java多线程与线程安全实践-基于Http协议的断点续传 Java多...
一个线程捕获另外一个线程的异常2---马克-to-win java视频
JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多...
Java多线程与线程安全实践-基于Http协议的断点续传.rarJava多线程与线程安全实践-基于Http协议的断点续传.rarJava多线程与线程安全实践-基于Http协议的断点续传.rarJava多线程与线程安全实践-基于Http协议的断点续传...
采用多线程的方式模拟小球碰撞的图形化方式
小球线程动画就是把进程分成若干个线程,每个小球运行互不干扰
多线程相关知识源码-----多线程案例源码