Мы пытаемся не рисовать определенные сегменты во временной серии jFreeChart.
Я пробовал это решение, но для меня набор данных всегда нулевой, поэтому не уверен, что я делаю неправильно. JFreeChart - изменить SeriesStroke линий диаграммы с сплошной на пунктирную линию
Вот пример нашего графика с пробелами, и мы хотели бы, чтобы соединительная линия не отображалась или, возможно,пунктирная линия по крайней мере. Вот код, который я пробовал:
XYLineAndShapeRenderer minuteRenderer = new XYLineAndShapeRenderer() {
Stroke solid = new BasicStroke(2.0f);
@Override
public Stroke getItemStroke(int row, int column) {
if (dataset == null) {
System.out.println("why am I null?");
return solid;
}
}
};
Может кто-нибудь посоветовать?
ОБНОВЛЕНИЕ: добавление окружающего кода для пояснения.Примечание. У меня есть действительный набор данных, потому что он строит графики, но рендер, который у меня есть, кажется, не ссылается на него.Возможно, нужно что-то сделать, чтобы связать рендерер с набором данных, когда происходит такой тип переопределения?
// ~~ Plot the Minute Average Data (avg, min, max)
plot.setDataset(MINUTE_DATA, getMinuteDataset());
plot.mapDatasetToRangeAxis(MINUTE_DATA, FILL_RANGE_AXIS);
//XYLineAndShapeRenderer minuteRenderer = new XYLineAndShapeRenderer();
XYLineAndShapeRenderer minuteRenderer = new XYLineAndShapeRenderer() {
@Override
public Paint getItemPaint(int row, int col) {
System.out.println("get item paint");
Paint cpaint = getItemColor(row, col);
if (cpaint == null) {
cpaint = super.getItemPaint(row, col);
}
return cpaint;
}
public Color getItemColor(int row, int col) {
System.out.println(col + "," + dataset.getY(row, col));
double y = dataset.getYValue(row, col);
if(y<=3) return Color.black;
if(y<=4) return Color.green;;
if(y<=5) return Color.red;;
if(y<=6) return Color.yellow;;
if(y<=10) return Color.orange;;
return null;
}
@Override
protected void drawFirstPassShape(Graphics2D g2, int pass, int series,
int item, Shape shape) {
System.out.println("drawing first pass shape");
g2.setStroke(getItemStroke(series, item));
Color c1 = getItemColor(series, item);
Color c2 = getItemColor(series, item - 1);
GradientPaint linePaint = new GradientPaint(0, 0, c1, 0, 300, c2);
g2.setPaint(linePaint);
g2.draw(shape);
}
};
minuteRenderer.setSeriesShapesVisible(0, false);
minuteRenderer.setSeriesShapesVisible(1, false);
minuteRenderer.setSeriesShapesVisible(2, false);
minuteRenderer.setSeriesPaint(0, XBLUE);
minuteRenderer.setSeriesPaint(1, DODGER_BLUE);
minuteRenderer.setSeriesPaint(2, DODGER_BLUE);
plot.setRenderer(MINUTE_DATA, minuteRenderer);
выполнение вышеупомянутого дает мне ошибку нулевого указателя:
SEVERE: Uncaught exception thrown in java.awt.EventDispatchThread, thread: 14-AWT-EventQueue-0
java.lang.NullPointerException
at filtec.gui.widgets.fmsqa.FmsLtaChartPanel$1.getItemColor(FmsLtaChartPanel.java:234)
где набор данных нулевой ...