2012-09-25 30 views
0

JavaFX LineChart由繪圖區域和座標軸組成。由於軸渲染使用一些顯示空間,因此折線圖中原點的位置不是(0,0)。我如何獲得相對於折線圖本身位置的這個位置?如何確定折線圖原點的像素位置?

我想計算繪圖區域中一個點相對於折線圖位置的位置。 x軸和y軸的getDisplayPosition方法提供了相對於原點的這種方法,但我沒有看到明顯的方法來獲取原點位置。

回答

2

更好的辦法是觀察是由chart.lookup命令這樣得到的情節領域:

//gets the display region of the chart 
Node chartPlotArea = chart.lookup(".chart-plot-background"); 
double chartZeroX = chartPlotArea.getLayoutX(); 
double chartZeroY = chartPlotArea.getLayoutY(); 
+0

是的!這正是我所期待的。對不起,我不能重新分配原來的賞金。 –

+0

沒問題,我爲其他搜索它的人發佈了這個答案,因爲你問了這個問題。去年我還沒有想到你還在等待答案.. ;-) – Kalaschni

3

axis.getDisplayPosition(val)方法提供給定軸的val相對於繪圖區域的左上角的繪圖區域的像素位置。您可以使用getDisplayPosition()方法計算任何點相對於折線圖原點的位置。請記住,這些像素位置在線形圖大小調整時會有所不同。

@Override 
public void start(Stage stage) { 
    stage.setTitle("Line Chart Sample"); 
    //defining the axes 
    final NumberAxis xAxis = new NumberAxis(); 
    final NumberAxis yAxis = new NumberAxis(); 
    xAxis.setLabel("Number of Month"); 
    //creating the chart 
    final LineChart<Number, Number> lineChart = new LineChart<Number, Number>(xAxis, yAxis); 

    lineChart.setTitle("Stock Monitoring, 2010"); 
    //defining a series 
    XYChart.Series series = new XYChart.Series(); 
    series.setName("My portfolio"); 
    //populating the series with data 
    series.getData().add(new XYChart.Data(-1, 4)); 
    series.getData().add(new XYChart.Data(0, 2)); 
    series.getData().add(new XYChart.Data(1, -2)); 
    series.getData().add(new XYChart.Data(5, 1)); 

    Scene scene = new Scene(lineChart, 800, 400); 
    lineChart.getData().add(series); 

    System.out.println(""); 
    stage.setScene(scene); 
    stage.show(); 

    System.out.println("Points in linechart -> Pixel positions relative to the top-left corner of plot area: "); 
    System.out.println("(0,0)    -> " + getFormatted(xAxis.getDisplayPosition(0), yAxis.getDisplayPosition(0))); 
    // Same as 
    // System.out.println("(0,0) " + getFormatted(xAxis.getZeroPosition(), yAxis.getZeroPosition())); 
    System.out.println("(-1,4)    -> " + getFormatted(xAxis.getDisplayPosition(-1), yAxis.getDisplayPosition(4))); 
    System.out.println("(1,-2)    -> " + getFormatted(xAxis.getDisplayPosition(1), yAxis.getDisplayPosition(-2))); 
    System.out.println("(-1.5,5) origin of plot area -> " + getFormatted(xAxis.getDisplayPosition(-1.5), yAxis.getDisplayPosition(5))); 

    System.out.println("Note: These pixel position values will change when the linechart's size is \n changed through window resizing for example."); 
} 

private String getFormatted(double x, double y) { 
    return "[" + "" + x + "," + y + "]"; 
} 
+0

你怎麼確定(-1.5,5)是在繪圖區的原點? –

+0

@ b3。通過觀察。我確定對於給定的窗口大小(800x400)和給定的數據系列值,在我的系統環境中,呈現的x軸最小值等於-1.5,y軸最大值等於5。這些值在窗口大小調整或數據序列更改時發生更改。 –

+0

如何計算這個零點? – Kalaschni