在Repast Symphony中动态更改代理的边框颜色

时间:2019-11-17 20:41:25

标签: repast-simphony

我必须动态更改代理的边框颜色。代理在显示屏上表示为默认圆圈。必须根据代理类内部定义的布尔变量来更改显示的颜色。 首次创建和显示座席时,它具有正确的样式,但是当座席类中的布尔变量更改时,边框颜色不会更改。 如果我对代理的填充颜色执行相同操作,则效果很好。我把我使用的代码放在这里:

public class NodeStyle extends DefaultStyleOGL2D{
    @Override
    public Color getBorderColor(Object agent) {
          Color borderColor = Color.BLACK;
          if(agent instanceof Process) {
                Process p = (Process)agent;
                if(p.isParticularNode) {
                     borderColor = Color.RED;
                }
           }
           return borderColor;
     }
}

创建代理并将其添加到上下文后,它将采用正确的颜色,但是如果isParticularNode发生更改,则边框颜色不会更改。 我也尝试过导入接口StyleOGL2D,但问题仍然存在

1 个答案:

答案 0 :(得分:2)

我在JZombies演示中尝试了此操作,在每个刻度上为每个用RandomHelper.nextDouble()设置的僵尸添加了一个“ id”双。边框颜色按预期更改。默认情况下,边框大小为0,因此可能需要在代码中进行更改。

public class ZombieStyle extends DefaultStyleOGL2D {

    public Color getColor(Object agent) {
        return Color.RED;
    }

    public Color getBorderColor(Object agent) {
        Zombie z = (Zombie)agent;
        if (z.getID() > 0.5) {
            return Color.GREEN;
        }
        return Color.black;
    }

    public int getBorderSize(Object agent) {
        return 4;
    }

}