0

注釈付きタイムラインの問題に取り組んでいます。ユーザーがいるタブに応じていくつかのグラフを描画する必要があるため、タブが変更されると、現在のグラフを消去して新しいデータを描画します。しかし、それを行う方法は?

今のところ、すべての行を削除していますが、機能していません。誰かが私を助けることができますか?

コードは次のとおりです。

...

//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 を拡張するクラスがあり、クリーン メソッドは次のようになりました。

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

何か案が?

ありがとう!

4

1 に答える 1

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;
  }
于 2011-08-11T10:15:53.333 に答える