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.

Por ahora veo esta salida

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

Respuestas a la pregunta(1)

Su respuesta a la pregunta