利用Java线程实现小球跳动
知识点
1.窗体,面板;
2.paint()方法;
3.线程;
核心算法
小球运动到左界面边界或右界面边界时,纵坐标不变,横坐标取相反方向
小球运动到上界面边界或下界面边界时,横坐标不变,纵坐标取相反方向
run()方法实现每0.02秒,小球跳动一下
public void run() {
// TODO Auto-generated method stub
while(true){
try {
Thread.sleep(20); //小球每0.02秒跳动一次
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*
* 小球运动到左界面或右界面时,zy不变,zx取相反方向
* 小球运动到上界面或下界面时,zx不变,zy取相反方向
*/
if(x<0||x>getWidth()-50){ //如果小球
zx=-zx;
}
if(y<0||y>getHeight()-50){
zy=-zy;
}
x=x+zx;
y=y+zy;
repaint();//重新调用paint方法
}
}
完整代码
Window.java
import javax.swing.JFrame;
public class Window extends JFrame{
public Window() {
setTitle("会跳的小球");
MyJpanel jp=new MyJpanel();
add(jp);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setBounds(100,100,400,400);
setVisible(true);
Thread t=new Thread(jp);
t.start();
}
public static void main(String[] args) {
new Window();
}
}
MyJpanel.java
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.JPanel;
public class MyJpanel extends JPanel implements Runnable {
int x=0;
int y=100;
int zx=5; //小球每次跳动的x方向位移
int zy=2; //小球每次跳动的y方向位移
@Override
public void paint(Graphics g) {
g.setColor(getBackground());//设置填充色为背景色
g.fillRect(0, 0, 400, 400); //设置矩形
g.setColor(Color.GREEN); //设置绿色
g.fillOval(x, y, 50, 50);//绘制50的圆
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
try {
Thread.sleep(20); //小球每0.02秒跳动一次
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*
* 小球运动到左界面或右界面时,zy不变,zx取相反方向
* 小球运动到上界面或下界面时,zx不变,zy取相反方向
*/
if(x<0||x>getWidth()-50){ //如果小球
zx=-zx;
}
if(y<0||y>getHeight()-50){
zy=-zy;
}
x=x+zx;
y=y+zy;
repaint();//重新调用paint方法
}
}
}