Вы знаете, что для ChartPanel существует метод getPreferredSize. Я хочу подобный метод для XYPlot. Поскольку у меня есть фоновое изображение, я буду масштабировать изображение для каждого изменения размера графика в ChartPanel. Ширина XYPLot для меня не важна. Я хочумасштабировать высоту фона.Поэтому мне нужно иметь размер XYPlot.
Изменения могут быть изменениями размера Windows, также вы знаете, что размер XYPlot зависит от элементов domainAxis, элементов Legend.
PS: я знаю, что могучитать информацию о графике в ChartEvent. Я хочу иметь координаты без события мыши триггера.
РЕДАКТИРОВАТЬ: я создаю панель со следующим кодом. Другой класс вызывает этот метод, затем добавляет JPanel с ChartPanel в JFrame
public void createPanel() {
XYPlot historyPlot = createHistoryPlot();
/** read forecast result job specific */
/** Creates future XYPlot */
XYPlot futurePlot = createFuturePlot();
/** range axis for CombinedRangeXYPlot */
final ValueAxis rangeAxis = new NumberAxis("");
CombinedRangeXYPlot plot = new CombinedRangeXYPlot(rangeAxis);
/** add subplot to plot */
plot.setGap(0);
plot.add(historyPlot, 1);
plot.add(futurePlot, 1);
/** Creates new plot includes combinedRange plot */
chart = new JFreeChart("", JFreeChart.DEFAULT_TITLE_FONT, plot, true);
panel = new ChartPanel(chart, true, true, true, false, true);
/** not enable zoom */
panel.setDomainZoomable(false);
panel.setRangeZoomable(false);
panel.validate();
panel.setVisible(true);
this.add(panel, BorderLayout.CENTER);
}
Затем я пытаюсь настроить график с помощью следующего кода. Он вызывается внешним классом после вызова метода createPanel. Поэтому ChartPAnel создается с вложенными участками в нем.
/**
* Customizes graph view.Changes view related settings.
* @param chart
* JFreeChart instance
*/
private void customizeGraphView(JFreeChart chart) {
CombinedRangeXYPlot combinedPlot = (CombinedRangeXYPlot) chart.getPlot();
@SuppressWarnings("unchecked")
/** read 2 subplot*/
List<XYPlot> subPlots = combinedPlot.getSubplots();
for (int plotIndex = 0; plotIndex < subPlots.size(); plotIndex++) {
/** get plot */
XYPlot plot = subPlots.get(plotIndex);
/** do not show domain grid lines */
plot.setDomainGridlinesVisible(false);
XYItemRenderer itemRenderer = plot.getRenderer();
/** if line and shape renderer */
if (itemRenderer instanceof StandardXYItemRenderer) {
StandardXYItemRenderer renderer = (StandardXYItemRenderer) itemRenderer;
/** show shapes in time series */
renderer.setBaseShapesVisible(true);
/** fill shapes in time series */
renderer.setBaseShapesFilled(true);
renderer.setBaseFillPaint(Color.BLACK);
// addItemLabels(renderer);
}
/** add severity bar for BackGround image for 2 subplot */
if (plotIndex == 0) {
addBackGroundImage(plot, Align.RIGHT);
} else {
/** returns java.awt.geom.Rectangle2D$Double[x=0.0,y=0.0,w=0.0,h=0.0] */
panel.getScreenDataArea()
addBackGroundImage(plot, Align.LEFT);
}
plot.setOutlineVisible(false);
}
}