Как очистить диаграмму визуализации AnnotatedTimeline gwt - PullRequest
0 голосов
/ 11 августа 2011

У меня проблема с аннотированными временными рамками.Я должен нарисовать некоторые диаграммы в зависимости от вкладки, которую использует пользователь, поэтому, когда вкладка меняется, я очищаю текущий график и рисую новые данные.Но как это сделать?

Пока я удаляю все строки, но это не работает.Кто-нибудь может мне помочь?

вот код:

...

//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 голосов
/ 11 августа 2011

Вам нужно пересоздать 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;
  }
...