可以使用你的幫助作業,包括擺動定時器,動作監聽器和多個對象。我不知道是否張貼的問題在這裏允許的,但我在使用動畫麻煩,這裏是我迄今爲止Java定時器動作監聽器
創建一個具有兩個雙域x和y一類顆粒, 構造將這些字段初始化爲0 和500之間的隨機值,返回它們的值的方法getX和getY以及隨機將x和y的值 中的值加1或減1的方法void move()。 (添加到x和y的數量是兩個單獨的隨機數 。)接下來,創建一個類ParticleFieldWithTimer,它擴展了 JPanel。這個類應該更喜歡500 * 500像素的大小。它的 構造函數應該首先用100個粒子對象填充一個ArrayList字段,然後啓動一個Swing Timer,該Swing Timer的滴答時間爲 秒的25倍。在每次打勾時,動作偵聽器應首先爲每個粒子調用方法 移動,然後調用重繪。 ParticleFieldWithTimer的paintComponent 方法應將每個粒子繪製爲其當前座標的3 * 3 矩形。確保定時器將當用戶關閉框架
這是ParticleFieldWithTimer類
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class ParticleFieldWithTimer extends JPanel{
private ArrayList<Particle> particle = new ArrayList<Particle>();
Timer timer;
boolean b;
public ParticleFieldWithTimer(){
this.setPreferredSize(new Dimension(500,500));
for(int i = 0; i < 100; i++) {
particle.add(new Particle());
timer = new Timer(40, new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
// change polygon data
// ...
Particle p = new Particle();
p.move();
repaint();
}
});
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
for (Particle p: particle) {
double temp1 = p.getX();
double temp2 = p.getX();
int tempX = (int) temp1;
int tempY = (int) temp2;
g2.fillRect(tempX, tempY, 3, 3);
}
}
public static void main(String[] args) {
final JFrame f = new JFrame("ParticleField");
final ParticleFieldWithTimer bb = new ParticleFieldWithTimer();
f.setLayout(new FlowLayout());
f.add(bb);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
try {
bb.finalize();
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
f.dispose();
}
});
f.pack();
f.setVisible(true);
}
}
這是粒子類
import java.util.Random;
public class Particle {
private double x , y ;
Random r = new Random();
public Particle() {
x = r.nextDouble()*500;
y = r.nextDouble()*500;
}
public Double getX() {
return x;
}
public Double getY() {
return y;
}
public void move() {
x = r.nextInt(2) - 1;
y = r.nextInt(2) - 1;
System.out.println(x + " " + y);
}
}
*「我不知道是否發佈問題..」* DYM作業規範?你的問題是什麼? –