1
here과 비슷한 마우스와 함께 움직이는 Jfreechart Gantt Chart 위에 십자 표시를 추가하고 싶습니다. 불행하게도이 오류가 표시됩니다jfreechart : 간트 차트에 십자형 오버레이 추가
private Crosshair xCrosshair;
private Crosshair yCrosshair;
public void createChartPanel(JFreeChart chart){
chartPanel = new ChartPanel(chart);
chartPanel.setInitialDelay(0); // make the tooltip appear quicker
// Mouse wheel listener for the zoom in out feature
chartPanel.addMouseWheelListener(this);
// Mouse movement listener for the cross hair feature
chartPanel.addChartMouseListener(this);
CrosshairOverlay crosshairOverlay = new CrosshairOverlay();
this.xCrosshair = new Crosshair(Double.NaN, Color.GRAY, new BasicStroke(0f));
this.xCrosshair.setLabelVisible(true);
this.yCrosshair = new Crosshair(Double.NaN, Color.GRAY, new BasicStroke(0f));
this.yCrosshair.setLabelVisible(true);
crosshairOverlay.addDomainCrosshair(xCrosshair);
crosshairOverlay.addRangeCrosshair(yCrosshair);
chartPanel.addOverlay(crosshairOverlay);
}
// add the custom renderer and modify x axis
public void createCategoryPlot(JFreeChart chart){
plot = chart.getCategoryPlot();
ganttRenderer = new Renderer();
plot.setRenderer(ganttRenderer);
/* Modify the x axis */
DecimalFormat format = (DecimalFormat) NumberFormat.getNumberInstance(Locale.ENGLISH);
format.applyPattern("#");
xAxis = new NumberAxis();
xAxis.setNumberFormatOverride(format);
xAxis.setLabel("Cycles");
CategoryAxis axis = plot.getDomainAxis();
axis.setLowerMargin(0.05);
axis.setCategoryMargin(0.55);
axis.setUpperMargin(0.05); // modify the position of each task axis
plot.setRangeAxis(xAxis);
// add change listener to for change in the axis range
plot.getRangeAxis().addChangeListener(this);
initRange = xAxis.getRange();
chartPanel.getChart().removeLegend();
}
public void chartMouseMoved(ChartMouseEvent event) {
int mouseX = event.getTrigger().getX();
int mouseY = event.getTrigger().getY();
Rectangle2D dataArea = this.chartPanel.getScreenDataArea();
JFreeChart chart = event.getChart();
double x = xAxis.java2DToValue(event.getTrigger().getX(), dataArea, RectangleEdge.BOTTOM);
// double y = DatasetUtilities.findYValue(plot.getDataset(), 0, x);
this.xCrosshair.setValue(x);
this.yCrosshair.setLabelGenerator(new CrosshairLabelGenerator(){
@Override
public String generateLabel(Crosshair arg0) {
return "y value";
}
});
}
, 나를 카테고리 플롯 위에 오버레이 할 수 없습니다 : 나는 내 자신을 만들어 그 예를 다음
.
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: org.jfree.chart.plot.CategoryPlot cannot be cast to org.jfree.chart.plot.XYPlot
at org.jfree.chart.panel.CrosshairOverlay.paintOverlay(CrosshairOverlay.java:233)
at org.jfree.chart.ChartPanel.paintComponent(ChartPanel.java:1658)
이 문제를 해결하는 방법에 대한 아이디어가 있으십니까?
'CrosshairOverlay'는'CategoryPlot'이 아닌'XYPlot'을 기대합니다. – trashgod
오류에서 알 수 있습니다. 하지만 '카테고리 플롯'에 십자형을 구현하려면 해결 방법이 필요합니다. – 2c00L
아마도 '카테고리 마커'입니까? – trashgod