更新图表时,JFreechart保留精确的缩放位置

时间:2013-08-26 16:13:41

标签: java swing zoom jfreechart

我想要做的是通过存储一些'来保留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的{​​{1}},而是提供原始(完整)轴的axis

尝试3

然后我提出了使用findRangeBounds(XYDataset)的想法,findRangeBounds(XYDataset)应该只提供可见数据的界限。不幸的是,我随后找到了关于CandlestickRenderer的{​​{3}}:它对XYLineAndShapeRenderer无效(仍​​然是?)(对于{{1}}它可以正常工作。)

所以我的问题是:有没有办法达到我想要的效果?

0 个答案:

没有答案