如何清理AnnotatedTimeline gwt可视化图表

时间:2011-08-11 09:09:18

标签: gwt annotatedtimeline

我正在处理带注释时间线的问题。 我必须根据用户的选项卡绘制一些图表,因此当更改选项卡时,我清理当前图表并绘制新数据。但是怎么做呢?

现在我要删除所有行,但它无效。 有人能帮助我吗?

这是代码:

...

//Creating Columns
dataTable.addColumn(ColumnType.DATETIME, "Time");
dataTable.addColumn(ColumnType.NUMBER, "Realtime Consumption");
dataTable.addColumn(ColumnType.NUMBER, "Historical Consumption");

//Create options
options.setDisplayAnnotations(false);
options.setDisplayZoomButtons(false);
options.setScaleType(AnnotatedTimeLine.ScaleType.FIXED);
options.setLegendPosition(AnnotatedTimeLine.AnnotatedLegendPosition.SAME_ROW);
options.setAllowRedraw(true);
options.setDisplayRangeSelector(false);
options.setFill(30);

//to parse the time
DateTimeFormat dtf = DateTimeFormat.getFormat("hh:mm:ss");

//For each item of the list
for(int i = 0; i < list.size(); i++){
    //get date
    Date date = new Date(list.getTimeAt(i));

    //get hh:mm:ss
    String time = date.getHours()+":"+date.getMinutes()+":"+date.getSeconds();

    //add row
    dataTable.addRow();
    dataTable.setValue(dataTable.getNumberOfRows() - 1, 0, dtf.parse(time));
    dataTable.setValue(dataTable.getNumberOfRows() - 1, 2, list.getDataAt(i));
}



/**
 * To clean the chart
 */
public void cleanChart(){
    //Remove all rows
    this.dataTable.removeRows(0, dataTable.getNumberOfRows());
    //Redraw the chart
    this.draw(this.dataTable, this.options);
}

谢谢, 毛里西奥


这很奇怪,但我做到了(看起来没问题,因为我会创建另一个数据表),但它仍然无效。旧数据继续存在。

我有一个扩展AnnotatedTimeLine的类,现在是clean方法:

/**
 * Method to clean the annotated time line
 */
public void clean() {
    //Create new table
    this.dataTable = DataTable.create();

    //Create columns
    this.dataTable.addColumn(ColumnType.DATETIME, "Time");
    this.dataTable.addColumn(ColumnType.NUMBER, "Data 1");
    this.dataTable.addColumn(ColumnType.NUMBER, "Data 2");

    //Redraw the chart with the same options
    this.draw(this.dataTable, this.options);
}

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您需要为新数据重新创建DataTable,而不需要这样做 this.dataTable.removeRows(0, dataTable.getNumberOfRows());

我有类似的东西

public void reloadChart(List<SharedBean> list, String titleX) {
    viz.draw(getChartData(), getOptions(titleX));
}

private DataTable getChartData() {
    DataTable data = DataTable.create();


    data.addColumn(ColumnType.STRING, "column");
    data.addColumn(ColumnType.NUMBER, "value");

    data.addRows(list.size());

    int row = 0;
    int i = 0;
    for(SharedBean bean: list){
        ......
    }

    return data;
  }