Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从集合中的更改更新JPanel画布_Java_Swing_Java 2d_Agent Based Modeling - Fatal编程技术网

Java 从集合中的更改更新JPanel画布

Java 从集合中的更改更新JPanel画布,java,swing,java-2d,agent-based-modeling,Java,Swing,Java 2d,Agent Based Modeling,我有一个代理(对象)集合,当模拟器开始时,每个代理执行一个act()方法,更新它们在环境中的位置(2D数组)。我的paintComponent(Graphics g)在另一个类中被重写(该类基本上遍历2D数组并绘制与代理类型对应的矩形颜色) 但是,实际的集合在模拟器类中,由用户单击GUI中的按钮独立运行。如果我将repaint()方法放在paintComponent(图形g)的末尾。它只更新JPanel画布两次,一次是在应用程序启动时,第二次是在我单击启动模拟的run按钮时 当所有代理都执行ac

我有一个代理(对象)集合,当模拟器开始时,每个代理执行一个act()方法,更新它们在环境中的位置(2D数组)。我的paintComponent(Graphics g)在另一个类中被重写(该类基本上遍历2D数组并绘制与代理类型对应的矩形颜色)

但是,实际的集合在模拟器类中,由用户单击GUI中的按钮独立运行。如果我将repaint()方法放在paintComponent(图形g)的末尾。它只更新JPanel画布两次,一次是在应用程序启动时,第二次是在我单击启动模拟的run按钮时


当所有代理都执行act方法时,如何让JPanel画布自动更新为新图像。或者,当某个代理在集合中发生更改时,在画布上绘制新位置并删除旧位置?

您需要某种方式让模型告诉UI发生了更改。你可以使用一个观察者模式,使用一个
ChangeListener
例如,我在考虑这个问题,但是我从来没有使用过观察者模式。在模拟中使用观察者模式的任何例子都会被欣赏。这说明了观察者模式。