【发布时间】:2015-09-17 15:24:16
【问题描述】:
我想编写一个程序来模拟蚂蚁。假设我有 100 只蚂蚁,每只蚂蚁都有坐标 (2 integers)。我使用 Java 图形 (Graphics2D)。
现在我想要一个可以读取这样列表的类:
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并重新安排绘制事件,请参阅 How to use Swing Timers 了解更多详情
标签: java graphics graphics2d