我想要做的是通过存储一些'来保留JFreechart的确切缩放位置。变量,然后重置新图表上的缩放位置。
我尝试过以下操作:
double zoomX = chartpanel.getScaleX();
double zoomY = chartpanel.getScaleY();
//After changing the chart
chartPanel.zoomInBoth(zoomX, zoomY);
但是,新图表会在中放大到图表的中心。
因此不是我以前的精确缩放/拖动状态。
我接下来尝试的是保存域和范围的可见lower
和upper
范围,并为新图表设置这些界限:
//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
。
然后我提出了使用findRangeBounds(XYDataset)
的想法,findRangeBounds(XYDataset)
应该只提供可见数据的界限。不幸的是,我随后找到了关于CandlestickRenderer
的{{3}}:它对XYLineAndShapeRenderer
无效(仍然是?)(对于{{1}}它可以正常工作。)
所以我的问题是:有没有办法达到我想要的效果?