我正在尝试获取LineChart<Number, Number>
上某点的x,y,以便可以向其添加Line
。因此,我尝试通过以下方式获取x值9:
Group root = new Group();
NumberAxis xAxis = new NumberAxis();
xAxis.setAutoRanging(false);
xAxis.setLowerBound(0);
xAxis.setUpperBound(9);
LineChart<Number, Number> lineChart = new LineChart<Number, Number>(xAxis, yAxis);
System.out.println(xAxis.getDisplayPosition(9)); // 0
root.getChildren().add(lineChart);
Scene scene = new Scene(root, 800, 800);
stage.setScene(scene);
stage.show();
在互联网上闲逛后,我遇到了一个可能的解决方案
Node chartPlotArea = lineChart.lookup(".chart-plot-background");
double chartZeroX = chartPlotArea.getLayoutX();
System.out.println(xAxis.getDisplayPosition(9) + chartZeroX);
哪个最终也输出了0
,为什么会这样呢?如何获得x,y的显示位置,以便可以将其传递到Line.setStartX(...)
/ Line.setStartY(...)
中?
答案 0 :(得分:1)
如果它不是很关键-您不需要在此处以编程方式生成版式传递,则可以让javaFX计算它并在展示阶段后立即进行更新。
在stage.show();
您将获得正确的输出
stage.show();
System.out.println(xAxis.getDisplayPosition(9));
我已经:443.0
答案 1 :(得分:0)
正如@Alex G.所提到的,在舞台上getDisplayPosition()
被叫完之后,我不得不打电话给show
。
但是,这不考虑图形的偏移量。因此,我必须像这样使用Bounds
:
stage.show();
Node chartArea = lineChart.lookup(".chart-plot-background");
Bounds chartAreaBounds = chartArea.localToScene(chartArea.getBoundsInLocal());
int xOffset = chartAreaBounds.getMinX();
System.out.println(xAxis.getDisplayPosition(9) + xOffset); // 324.21428571428567