Eje de dominio JFree desplazable y etiqueta de marcador personalizada
Tengo este código para dibujar el gráfico, esto funciona bien. Necesito dos cosas aqui
en el eje del dominio (x) Quiero poder desplazarme.En los marcadores veo una línea gruesa y negrita. Quiero poder ver texto legible para este marcador.y al hacer zoom veo esto
También en el eje del dominio tengo valores millis. ¿Puedo asignarlo a fechas legibles por humanos?
public class Grapher extends ApplicationFrame {
public Grapher(final String title, List<PriceModel> priceModels) {
super(title);
final XYSeries series = new XYSeries("foo");
double max = Double.MIN_VALUE, min = Double.MAX_VALUE;
for (int i = 0; i < priceModels.size(); i++) {
double price = priceModels.get(i).getPrice();
if (price < min) {
min = price;
}
if (price > max) {
max = price;
}
series.add((double) priceModels.get(i).getDate(), price);
}
final XYSeriesCollection data = new XYSeriesCollection(series);
final JFreeChart chart = ChartFactory.createXYLineChart(
"XY Series Demo",
"X",
"Y",
data,
PlotOrientation.VERTICAL,
true,
true,
false
);
for (int i = 0; i < priceModels.size(); i++) {
if (priceModels.get(i).getAction() != null) {
Marker marker = new ValueMarker((double) priceModels.get(i).getDate());
marker.setLabelAnchor(RectangleAnchor.BOTTOM_RIGHT);
marker.setLabelTextAnchor(TextAnchor.TOP_RIGHT);
if (priceModels.get(i).getAction() == Types.Action.SELL) {
marker.setPaint(Color.green);
marker.setLabel("SELL");
} else {
marker.setPaint(Color.red);
marker.setLabel("BUY");
}
marker.setStroke(new BasicStroke(10.0f));
chart.getXYPlot().addDomainMarker(marker);
}
}
chart.getXYPlot().setBackgroundPaint(Color.white);
chart.getXYPlot().getRenderer().setPaint(Color.BLUE);
chart.getXYPlot().getRangeAxis().setRange(min - 1, max + 1);
final ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setBackground(Color.WHITE);
chartPanel.setRangeZoomable(true);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);
}
public static void draw(List<PriceModel> priceModels) {
final Grapher demo = new Grapher("foo", priceModels);
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}