我想製作一個程序來模擬螞蟻。比方說,我有100只螞蟻,每個座標都有座標(2 integers
)。我使用Java Graphics(Graphics2D)。用座標列表更新G2D
現在我想一個類,倒像是一個列表:
List<List<Integer>> list = new ArrayList();
該列表例如:
[100,200],[200,100]
爲座標在裏面。現在我想讓班級更新時間並刪除所有「點」(螞蟻),然後在列表中繪製新的座標。
現在這是行不通的。
public class FrameHandler {
Panel panel = new Panel();
public FrameHandler() {
//initialize frame
frame.repaint();
List<List<Integer>> test = new ArrayList();
List<Integer> t1 = new ArrayList();
t1.add(100);
t1.add(200);
test.add(gunther);
frame.add(panel);
panel.setList(test);
//the thread sleeps for 5 seconds
List<Integer> t2 = new ArrayList();
t2.add(100);
t2.add(100);
test.add(gunther2);
panel.removeAll();
panel.setList(olaf);
}
public void setList(List<Integer> list) {
panel.setList(list);
}
public void setSize(int width, int height) {
frame.setSize(width, height);
}
private class Panel extends JPanel {
List<List<Integer>> antList = new ArrayList();
private void doDrawing(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
for(int i = 0; i < antList.size(); i++) {
g2d.fillRect(antList.get(i).get(0), antList.get(i).get(1), 2, 2);
}
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
doDrawing(g);
}
public void setList(List<List<Integer>> list) {
antList = list;
}
}
}
如果您有其他的想法如何解決這個問題,也許有一個API或做圖形的另一種方法,我會很高興聽到這個消息。
*「現在我想讓班級更新時間並刪除所有的」點「(螞蟻),然後在列表中將它們繪製爲新的座標。 「* - 這很像繪畫在Swing中的工作原理。您可能需要使用Swing'Timer'來更新'List'並重新計劃繪製事件,請參見[如何使用Swing定時器](http://docs.oracle.com/javase/tutorial/uiswing/misc/timer .html)瞭解更多詳情 – MadProgrammer