我一直在使用一个循环绘制多个椭圆,如下图所示,结果使用一种颜色对所有的省略号是完美的,但我的目标是颜色的每个椭圆用不同的颜色。有没有什么办法让物业Color.BLUE
在每次迭代中改变它的价值呢?
for (int i = 0; i < 3; i++)
{
XYShapeAnnotation unitCircle1 = new XYShapeAnnotation(
new Ellipse2D.Double((FinalArayOfOptpar[s][i] - Math.abs(FinalArayOfOptpar[s][i + 2])),
(FinalArayOfOptpar[s][i + 1] - Math.abs(FinalArayOfOptpar[s][i + 3])),
Math.abs(FinalArayOfOptpar[s][i + 2] * 2.0), Math.abs(FinalArayOfOptpar[s][i + 3] * 2.0)),
new BasicStroke(0.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER,
10.2f), Color.BLUE);
xyPlot.addAnnotation(unitCircle1);
}
几十
XYShapeAnnotations
将被建立...所以创建XYShapeAnnotation
的多个实例不会为我的目的工作。
令人高兴的是,一个实例是XYShapeAnnotation
小只是48字节的每个在下面的例子。你要profile是肯定的。
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.geom.Ellipse2D;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.annotations.XYShapeAnnotation;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
/**
* @see https://stackoverflow.com/a/35236100/230513
*/
public class AnnotationTest {
private static final BasicStroke stroke = new BasicStroke(2.0f);
private static final int N = 16;
private static final int S = 8;
public static void main(String[] args) {
EventQueue.invokeLater(new AnnotationTest()::display);
}
private void display() {
XYDataset data = createDataset();
JFreeChart chart = ChartFactory.createXYLineChart("ArcTest", "X", "Y",
data, PlotOrientation.VERTICAL, true, true, false);
XYPlot plot = chart.getXYPlot();
XYLineAndShapeRenderer renderer
= (XYLineAndShapeRenderer) plot.getRenderer();
renderer.setBaseShapesVisible(true);
for (int i = 0; i < N; i++) {
double x = data.getXValue(0, i) - S / 2;
double y = data.getYValue(0, i) - S / 2;
Ellipse2D.Double ellipse = new Ellipse2D.Double(x, y, S, S);
Color color = Color.getHSBColor((float) i / N, 1, 1);
renderer.addAnnotation(new XYShapeAnnotation(ellipse, stroke, color));
}
ChartFrame frame = new ChartFrame("Test", chart);
frame.pack();
frame.setVisible(true);
}
private static XYDataset createDataset() {
XYSeriesCollection result = new XYSeriesCollection();
XYSeries series = new XYSeries("ArcTest");
for (int i = 0; i < N; i++) {
series.add(i * S, i * S);
}
result.addSeries(series);
return result;
}
}