我想要做的是通过存储“一些”变量然后重置新图表上的缩放位置来保留 JFreechart 的确切缩放位置。
我尝试过执行以下操作:
尝试 1
double zoomX = chartpanel.getScaleX();
double zoomY = chartpanel.getScaleY();
//After changing the chart
chartPanel.zoomInBoth(zoomX, zoomY);
但发生的情况是新图表被放大到图表的中心。
因此不是我之前的确切缩放/拖动状态。
尝试 2
我接下来尝试的是保存域和范围的可见和边界,并为新图表设置这些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
可见axis
的但原始(完整)轴的。
尝试 3
然后我想出了使用findRangeBounds(XYDataset)
which 应该只给出可见数据范围的想法。不幸的是,我随后发现了以下内容findRangeBounds(XYDataset)
:它不起作用(仍然?)CandlestickRenderer
(因为XYLineAndShapeRenderer
它工作正常)。
所以我的问题是:有没有办法完成我想要的?