このコードは以下のとおりですか? ArrayListに新しい楕円を200ミリ秒ごとに追加して表示し、1つずつ実行したいと考えています。 1つのパーティクルs.runner()を実行しているときにうまく動作します。それは私のすべての粒子を実行するように見えません。graphics2Dのリスト
MAIN:
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.Timer;
public class ExempelGraphics extends JFrame implements ActionListener {
Timer t;
private int inc = 0;
ArrayList<Surface> particle = new ArrayList<>();
Surface s;
public ExempelGraphics() {
t = new Timer(10, this);
t.start();
s = new Surface(10, 10);
initUI();
}
private void initUI() {
add(s);
setSize(350, 250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
// s.runner();
// add
if (inc++ % 20 == 0) {
particle.add(new Surface(10, 10));
}
// display
for (int i = 0; i < particle.size(); i++) {
Surface p = particle.get(i);
p.runner();
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
ExempelGraphics ex = new ExempelGraphics();
ex.setVisible(true);
}
});
}
}
グラフィックス:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JPanel;
public class Surface extends JPanel {
private int locX = 0;
private int locY = 0;
public Surface(int locX, int locY) {
this.locX = locX;
this.locY = locY;
}
public void runner() {
locX = locX + 1;
repaint();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.RED);
g2d.fillOval(locX, locY, 10, 10);
}
}
質問の回答は投稿しないでください。これは別の新しい問題です。しかしここで何をやっているのか - コンストラクタでは、クラスの別のインスタンスを作成するメソッドを呼び出します。このメソッドは、そのコンストラクタを呼び出して、クラスの別のインスタンスを作成します。そのコンストラクタを呼び出すクラスは、そのコンストラクタを呼び出すクラスの別のインスタンスを作成します。あなたは不必要に再帰しています。 –