2

我想要做的是通过存储“一些”变量然后重置新图表上的缩放位置来保留 JFreechart 的确切缩放位置。

我尝试过执行以下操作:

尝试 1

double zoomX = chartpanel.getScaleX();
double zoomY = chartpanel.getScaleY();

//After changing the chart
chartPanel.zoomInBoth(zoomX, zoomY);

但发生的情况是新图表被放大到图表的中心

因此不是我之前的确切缩放/拖动状态。

尝试 2

我接下来尝试的是保存域和范围的可见和边界,并为新图表设置这些lowerupper

//At top of class
private double domainMin;
private double domainMax;
private double rangeMin;
private double rangeMax;

//In main method
if (resetZoom)
{
   domainAxis.setRange(domainMin, domainMax);
   mainPlot.setDomainAxis(domainAxis);
   rangeAxis.setRange(rangeMin, rangeMax);
   mainPlot.setRangeAxis(rangeAxis);
}

if (!(resetZoom))
{
   domainMin = mainPlot.getDomainAxis().getRange().getLowerBound();
   domainMax = mainPlot.getDomainAxis().getRange().getUpperBound();
   System.out.println(domainMin + "," + domainMax);

   rangeMin = mainPlot.getRangeAxis().getRange().getLowerBound();
   rangeMax = mainPlot.getRangeAxis().getRange().getUpperBound();
   System.out.println(rangeMin + "," + rangeMax);
}

但这继续给出相同的值:

1.3685904E12,1.3776192E12
382.6265,519.9835

1.36846512E12,1.38025008E12
382.6265,519.9835

1.3685904E12,1.3776192E12
382.6265,519.9835

1.36846512E12,1.38025008E12
382.6265,519.9835

因此,我怀疑这些方法.getDomainAxis().getRange().getLowerBound();并且.getDomainAxis().getRange().getUpperBound();不给出UpperBound可见axis的但原始(完整)轴的。

尝试 3

然后我想出了使用findRangeBounds(XYDataset)which 应该只给出可见数据范围的想法。不幸的是,我随后发现了以下内容findRangeBounds(XYDataset):它不起作用(仍然?)CandlestickRenderer(因为XYLineAndShapeRenderer它工作正常)。

所以我的问题是:有没有办法完成我想要的?

4

0 回答 0