2

我有一个时间堆栈图,可以通过单击单选按钮更改其数据集。在模型运行时,单击单选按钮时图表会立即更新其外观。但是,当模型暂停时,单击单选按钮时图表区域变为空白;相比之下,图例会自动更新。如何手动强制图表区域重绘自身?

4

3 回答 3

2

当你暂停一个模型时,实际上只有一部分 Anylogic 被暂停了。处理 GUI 的线程继续运行,这就是为什么您可以在模型暂停时在模型中导航。这也意味着,如果您在模拟暂停时尝试更新图表的数据,则外观将刷新,但是 - 由于您的数据正在另一个当前暂停的线程中更新 - 它不会收到该数据。

如果您想暂停模拟并仍然能够切换图表中显示的数据,您可以查看 Airport 示例模型。它提供了一种在不同图表之间切换的好方法,方法是使它们可见/不可见并调整宽度、高度、x 和 y。本质上,您制作所有需要的图表,将它们完美重叠,然后让您当前感兴趣的图表可见。

如果您想以编程方式创建图表,除了使用创建图表之外new TimeStackChart(...),您还必须使用 将其添加到顶级演示组main.presenation.add(...)。如果您不这样做,图表将永远不会出现在模型中,因为模型将没有任何东西可以显示!要查找有关如何以编程方式创建图表的更多信息,请在其中制作图表,Main然后Main在 Java 编辑器中打开。找到您创建的图表,查看它的构造函数(有很多参数!),并将其用作您希望创建的图表的粗略模板。帮助文档将进一步理解您看到的参数。

于 2014-11-04T09:24:35.580 回答
0

你试过这个chart.refresh();方法吗?也尝试使用更新嵌入代理agent.onChange()

希望有帮助

于 2014-11-04T06:30:20.293 回答
0

我遇到了完全相同的问题,并想出了解决方法。

试试这个,我知道它适用于 AnyLogic v7:

if (getEngine.getState() == getEngine().PAUSED ){

    dynChart.setSelectedItemIndices( new int[]{0} );

    dynChart.setSelectedItemIndices( null );

}

通过选择/取消选择其中一个图例项,我可以在暂停或完成时手动刷新图表。我花了几个小时尝试 API 变体,但无济于事,所以我只是模拟了 UI 中实际工作的内容,并且它工作了。

我正在动态生成一个文本项作为图表标题,但是当像图表一样暂停时,我没有同样的运气让文本刷新。关于那个有什么想法吗?

于 2015-01-15T00:28:18.040 回答