我有一个针对LineChart的抽象类,该类的序列分为一些序列,这些序列将仅显示数据点之间的线,而某些序列仅显示一些数据点而没有连接线。这是用CSS完成的,可以正常工作。 (帖子末尾有指向图片的链接。)
public abstract class GeneralChart<XType extends Number, YType extends Number> extends LineChart<XType, YType> {
protected final static int accuracyOfPlot = 1000;
protected LineSeries lineSeries;
protected PointSeries pointSeries;
GeneralChart(ValueAxis<XType> xTypeAxis, ValueAxis<YType> yTypeAxis, int numberOfLineSeries, int numberOfPointSeries) {
super(xTypeAxis, yTypeAxis);
lineSeries = new LineSeries(numberOfLineSeries); // Init Line Series
pointSeries = new PointSeries(numberOfPointSeries); // Init Point Series
setAnimated(true); // This is the problem!
}
// ...
// Some general methods that probably aren't important
// ...
public class LineSeries { // This kind of series will be displayed as a connected Line without showing the data points.
int numberOfSeries;
int[] indicesOfSeries;
LineSeries(int numberOfSeries) {
this.numberOfSeries = numberOfSeries;
indicesOfSeries = new int[numberOfSeries];
for (int seriesIndex = 0; seriesIndex < numberOfSeries; seriesIndex++) {
Series<XType, YType> series = new Series<>(); // Generate series
getData().add(series); // Add series to chart
indicesOfSeries[seriesIndex] = getData().indexOf(series); // Store index of series
// Init all Lines
XType[] initialXData = getInitialXDataForLines();
YType[] initialYData = getInitialYDataForLines();
getSeries(seriesIndex).getData().clear();
for (int index = 0; index < accuracyOfPlot; index++) {
getSeries(seriesIndex).getData().add(new Data<>(initialXData[index], initialYData[index]));
}
}
}
Series<XType, YType> getSeries(int index) {
return getData().get(indicesOfSeries[index]);
}
void updateData(int seriesIndex, YType[] yData) {
for (int index = 0; index < accuracyOfPlot; index++) {
// Only update y values
getSeries(seriesIndex).getData().get(index).setYValue(yData[index]);
}
}
// Some methods for styling etc.
}
public class PointSeries { // This kind of series will be displayed as points without the connecting lines
int numberOfSeries;
int[] indicesOfSeries;
PointSeries(int numberOfSeries) {
this.numberOfSeries = numberOfSeries;
indicesOfSeries = new int[numberOfSeries];
for (int index = 0; index < numberOfSeries; index++) {
Series<XType, YType> series = new Series<>(); // Generate series
getData().add(series); // Add series to chart
indicesOfSeries[index] = getData().indexOf(series); // Store index of series
}
}
private Series<XType, YType> getSeries(int index) {
return getData().get(indicesOfSeries[index]);
}
void updateData(int seriesIndex, XType[] xData, YType[] yData) {
getSeries(seriesIndex).getData().clear(); // Clear all existing data
// Now add new given data
for (int pointIndex = 0; pointIndex < xData.length; pointIndex++) {
Data<XType, YType> data = new Data<>(xData[pointIndex], yData[pointIndex]);
getSeries(seriesIndex).getData().add(data);
}
}
// Some methods for styling etc.
}
}
现在,如果我使用新值更新图表系列,则线系列将显示所有与我期望的一样的东西。但是,点系列不能在正确的位置显示点。
过一会儿,我意识到只有在使用setAnimated(true)
时才会发生这种情况。但这对我来说没有意义,您有什么想法吗?
可能与我更新数据的方式有关:
对于线系列,我只更新每个数据的y值。
对于点系列,我清除所有数据并在此之后添加新数据。
如果您需要代码的其他任何部分,请告诉我,但我想这应该足够了:)非常感谢!
Here,您可以了解setAnimated(true)
的情况。
Here(使用setAnmiated(false)
),您会看到应该怎样。