Jako nowy użytkownik forum witam wszystkich.
Programowanie w Java zgłębiam od niedawna.
Piszę aplikację pobierającą dane z API brokera Forex, analizującą dane OHLC (cena otwarcia, najwyższa, najniższa, zamknięcia) i generującą wybrany fragment wykresu świecowego.
Do wykresów używam JFreeChart 1.5.0 oraz Swinga. Musiałem dodać do projektu też JFreeChart 1.0.19 bo w 1.5.0 nie ma chyba SegmentedTimeline.newMondayThroughFridayTimeline().
Mam gotową działającą aplikację - ściąga i aktualizuje dane, zapisuje na dysku, generuje i wyświetla wykresy.
Jest jednak problem z dodaniem etykiet dla poszczególnych świeczek.
Zrobiłem na wzór HighLowItemLabelGenerator swoją klasę z działającą metodą generateToolTip ale użycie metody generateLabel nie daje efektu.
public class LabelGenerator implements XYItemLabelGenerator,
XYToolTipGenerator, Cloneable, PublicCloneable, Serializable {
Przerobienie klasy CandlestickRenderer na wzór AbstractXYItemRenderer przez dodanie metod drawItemLabel i generateLabel też nie zadziałało.
public class MyCandleRenderer extends AbstractXYItemRenderer
implements XYItemLabelGenerator, XYItemRenderer, Cloneable, PublicCloneable, Serializable {
Proszę o sugestie jak zmusić CandlestickRenderer do wyświetlania "Label" dla pojedynczych elementów.
Jak nie wyjdzie z Label będę próbował z Annotation.
Poniżej fragment "opornego" kodu i screen aplikacji.
public static JFreeChart createChart(String symbol, ChartDataset dataset) {
JFreeChart chart = ChartFactory.createCandlestickChart(symbol, "", "", dataset, false);
XYPlot plot = (XYPlot) chart.getXYPlot();
plot.setOrientation(PlotOrientation.VERTICAL);
plot.setBackgroundPaint(Color.getHSBColor(0.63f, 0.0f, 0.25f));
plot.setRangeGridlinePaint(Color.GRAY);
ValueAxis valueAxis = plot.getRangeAxis();
valueAxis.setRange(dataset.min, dataset.max);
valueAxis.setVerticalTickLabels(false);
DateAxis dateAxis = (DateAxis) plot.getDomainAxis();
SegmentedTimeline timeline = SegmentedTimeline.newMondayThroughFridayTimeline();
dateAxis.setTimeline(timeline);
MyCandleRenderer renderer = new MyCandleRenderer();
DateFormat patern = new SimpleDateFormat("yyyy-MM-dd HH:mm");
LabelGenerator generator = new LabelGenerator(patern, new DecimalFormat("0.00000"));
renderer.setDefaultToolTipGenerator(generator);
renderer.setDefaultItemLabelGenerator(generator);
renderer.setDefaultItemLabelFont(new Font("Serif", Font.PLAIN, 20));
renderer.setDefaultItemLabelPaint(Color.green.darker());
renderer.setDefaultPositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.CENTER, TextAnchor.CENTER));
renderer.setAutoWidthMethod(MyCandleRenderer.WIDTHMETHOD_AVERAGE);
renderer.setDefaultItemLabelsVisible(true);
plot.setRenderer(renderer);
return chart;
}