本篇实现了利用java线程的内容,模拟小球做平抛自由落体
代码部分:
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class Demo extends JFrame{
JMenuBar bar;
JMenu j;
JMenuItem i;
Container c = getContentPane();
JLabel label = new JLabel();
boolean need = true;
public Demo() {
// TODO Auto-generated constructor stub
setBounds(300, 50, 700, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("模拟小球坠落");
setVisible(true);
init();
setBar();
setResizable(false);
// setLabel(670,425);//最低y=425,x=670
}
void init(){
c.setLayout(null);
setLabel(670,0);
label.setBackground(Color.cyan);
label.setOpaque(true);
c.add(label);
}
void startThread(){
th.start();
}
Thread th = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
boolean isUP = false;
int time = 0;
int goTime =0;
int high = 425;
int x = 0;
int y = 0;
double v = 0;//速度
double a = 0.008;//加速度
while(need){
synchronized (this) {
// boolean vChanged = false;
x = (int)(670-0.7*time);
// System.out.println(x+","+y);
if(y>425){
isUP = true;
v = goTime*a;
goTime = 0;
high = high/2;
}
if(y<425-high){
isUP = false;
v = 0;
goTime = 0;
}
if(isUP){
y = 425+(int)((1.2*a*goTime*goTime)-(1*v*goTime));
}else{
y = (int)(a*goTime*goTime+425-high);
}
setLabel(x,y);
goTime++;
time++;
try {
Thread.sleep(5);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(x==0){
need = false;
}
}
}
}
});
void setBar(){
bar = new JMenuBar();
j = new JMenu("开始");
i = new JMenuItem("释放小方块");
j.add(i);
bar.add(j);
setJMenuBar(bar);
i.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
startThread();
}
});
}
//设置标签状态方法
void setLabel(int x,int y){
label.setBounds(x, y, 20, 20);
}
public static void main(String[] args) {
Demo d = new Demo();
}
}
运行截图:
大概就是从右上角biu~的掉下来,弹一哈,再biu ~的掉下来……直到尽头