【问题标题】:How do you add data bars to a chart via Java?如何通过 Java 将数据条添加到图表中?
【发布时间】:2019-12-05 04:11:08
【问题描述】:

在启动时,我试图向条形图添加不同数量的值。我有一个代理类型Component。它有一些与之相关的变量,一个是hopperLevel。我基于为这些变量分配值的 Excel 工作表创建多个组件代理。创建的组件代理的数量取决于 Excel 工作表上填写的行数。随着模拟运行,hopperLevel 发生变化,我想为所有组件绘制components(0).hopperLevel, components(1).hopperLevel, components(2).hopperLevel, etc. 图表。

我在On startup 字段中尝试了addDataItem 方法,如下所示:

for ( Component comp : components )
{
    chartHopperLevels.addDataItem(comp.hopperLevel, comp.componentName, blue);
} 

但得到错误:

“BarChart类型中的addDataItem(DataItem, String, Color)方法不适用于参数(int, String, Color)”

我知道 int 不是 DataItem,但我不确定 DataItem 是什么。

如何使用此方法?还是有更好的办法?

【问题讨论】:

    标签: anylogic


    【解决方案1】:

    您不能直接引用addDataItem() 函数中的值。这是因为 Java 无法监控一个值并在它发生变化时执行某些操作。

    相反,AnyLogic 定义了DataItem,它或多或少只包含一个更新函数,该函数被触发,然后提取您的值的新版本。触发器可以是自动(在图表中设置自动更新数据)或手动(DataItem.update())。此更新功能是为您要监控的每个值自定义构建的。

    您可以在 main 的 Additional 类代码中构建这样一个自定义 DataItem/update 函数(此处:用于变量 myVariable):

    public class MyDataItem extends DataItem{
    @Override
        public void update(){
            super.setValue(myVariable);
        }
    }
    

    您可以像这样初始化DataItem 的自定义版本:

    DataItem di = new MyDataItem();
    

    最后你可以将它(就像你已经做的那样)添加到你的条形图中:

    chart.addDataItem(di, "my value", red);
    

    【讨论】:

    • 很棒的@Florian 谢谢。
    【解决方案2】:

    您需要先阅读并理解创建 DataItem 的 API,请参阅AnyLogic help

    您可以按如下方式创建 DataItem:

    DataItem myItem = new DataItem();
    myItem.setValue(12);
    chart.addDataItem(myItem, "cool", Color.blue);
    

    因此,您首先创建一个单独的 DataItem 对象,然后将其值设置为您喜欢的值。然后,您可以将其添加到您的条形图(在我上面的示例代码中称为“图表”)。

    干杯

    【讨论】:

    • 谢谢@Benjamin。这种工作但不符合我预期的功能。使用 setValue() 方法只允许在运行时不更新的初始值。我知道我可以定期重复 setValue() 方法,但我不禁想到有更好的方法来复制按“条形图 - 数据属性”窗口中的 + 按钮。
    猜你喜欢
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多