Как очистить диаграмму визуализации аннотированной диаграммы gwt

136
16

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

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

вот код:

...

//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);
}

Спасибо, Maurício

Это очень странно, но я сделал это (это выглядит нормально, потому что я создаю другой тип данных), и он все еще не работает. Старые данные продолжаются.

У меня есть класс, который расширяет AnnotatedTimeLine, и теперь чистый метод:

/**
* 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);
}

Есть идеи?

Благодарю!

спросил(а) 2021-01-19T15:22:10+03:00 8 месяцев назад
1
Решение
79

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

ответил(а) 2021-01-19T15:22:10+03:00 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема