在ChartPanel中每次更改后读取XYPlot大小

时间:2012-03-06 11:20:21

标签: java jfreechart

你知道ChartPanel存在getPreferredSize方法。我想要一个类似于XYPlot的方法。因为我有一个背景图像,我会在ChartPanel中对每个绘图大小的变化进行缩放.XYPLot宽度对我来说并不重要。我想要背景的比例高度。 所以我需要有XYPlot的大小。

更改可以是Windows调整大小更改,您也知道XYPlot大小受域名商品项目,图例项目的影响。

P.S:我知道我可以在ChartEvent中读取情节信息。我希望坐标没有触发鼠标事件。

编辑:我正在使用以下代码创建面板。另一个类调用此方法,然后将带有ChartPanel的JPanel添加到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);
    }

}

1 个答案:

答案 0 :(得分:1)

使用drawBackgroundImage()时,setBackgroundImage()看起来像是这样。如果没有,您可以覆盖drawBackground()来改变现有行为。

附录:发送给Rectangle2D的{​​{1}}参数应提供您想要的几何图形。

附录:覆盖drawBackground()的示例显示了情节drawBackground()。请注意,Rectangle2D会继承ChartPanel的默认布局,即JPanel

控制台:

java.awt.Rectangle[x=8,y=28,width=664,height=388]

代码:

FlowLayout