我正在使用XYBoxAnnotation來劃分JFreeChart上的矩形區域。我希望盒子的一面「開放」,即走出無窮遠。我嘗試將該值設置爲Double.POSITIVE_INFINITY
,但這似乎不起作用。我也嘗試將其設置爲Double.MAX_VALUE
,但沒有運氣。在這些情況下,註釋甚至不會顯示在劇情上。並沒有拋出異常。帶有XYBoxAnnotation的JFreeChart在一側打開
下面是我的代碼的一個非常簡單的版本,我在其中生成XYBoxAnnotation並將其添加到圖中。
XYBoxAnnotation _axisMarker = new XYBoxAnnotation(xLow, yLow, Double.POSITIVE_INFINITY, yHigh, new BasicStroke(0.5F), Color.WHITE, Color.WHITE);
_plot.getRenderer().addAnnotation(_axisMarker, Layer.BACKGROUND);
編輯:
我想出所述註釋被沒有顯示出來的原因是因爲用於註解的x值比軸刻度多大得多。出於某種原因,這會導致註釋不可見,直到縮小到足夠的程度。
感謝@ trashgod的回答,我想出了一個解決方案。他的回答並不適合我,因爲我的情節允許縮放,並且在縮小時可以看到方框的邊緣。
首先,我添加了一個PlotChangeListener
聽時的情節被放大了:
// define PlotChangeListener to update the annotation when the plot is zoomed
private PlotChangeListener _zoomListener = new PlotChangeListener() {
@Override
public void plotChanged(PlotChangeEvent plotChangeEvent) {
if (_basisIsotope != null) {
updateAxisMarkers();
}
}
};
然後我創建了一個函數來重新繪製基於新的情節範圍註釋:
// function to re-draw the annotation
private void updateAxisMarkers() {
_plot.removeChangeListener(_zoomListener); // remove to prevent triggering infinite loop
// define xLow, yLow and yHigh...
double xHigh = _plot.getDomainAxis().getUpperBound() * 1.1;
XYBoxAnnotation _axisMarker = new = new XYBoxAnnotation(xLow, yLow, xHigh, yHigh, new BasicStroke(0.5F), Color.WHITE, Color.WHITE);
_plot.getRenderer().addAnnotation(annotation);
_plot.addChangeListener(_zoomListener); // add back
}
感謝您的回答。它不適合我,因爲我的情節允許縮小。放大時,您可以看到框的邊緣。但是,它確實使我找到了解決方案。我添加了一個'PlotChangeListener'來監聽圖表何時放大,然後將框邊界重置爲新的繪圖邊界。 – sorayadragon