问题描述
我正在尝试获取一系列散点图的每个数据(点)的坐标。
public class Main extends Application {
@Override public void start(Stage stage) {
stage.setTitle("Scatter Chart Issue");
final NumberAxis xAxis = new NumberAxis(0,10,1);
final NumberAxis yAxis = new NumberAxis(-100,500,100);
final ScatterChart<Number,Number> sc = new
ScatterChart<Number,Number>(xAxis,yAxis);
xAxis.setLabel("Time");
yAxis.setLabel("Random data");
sc.setTitle("Chart");
XYChart.Series series1 = new XYChart.Series();
series1.setName("Series1");
series1.getData().add(new XYChart.Data(4.2,193.2));
series1.getData().add(new XYChart.Data(2.8,33.6));
series1.getData().add(new XYChart.Data(6.2,24.8));
sc.getData().add(series1);
for(XYChart.Data<Number,Number> dot : sc.getData().get(0).getData()) {
double xCoordinate = dot.getNode().localToScene(dot.getNode().getBoundsInLocal()).getMinX();
double yCoordinate = dot.getNode().localToScene(dot.getNode().getBoundsInLocal()).getMinY();
System.out.println(xCoordinate + "," + yCoordinate);
}
Scene scene = new Scene(sc,400);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
这是我得到的,似乎该系列的所有点都具有相同的坐标,这是错误的:
因此,我的问题是:如何从一系列散点图中获取每个数据的坐标? 谢谢。
编辑:添加完整的工人阶级
解决方法
将 for 循环放在 stage.show 之后:
您在布局发生之前要求坐标(因此尚未设置所有节点的坐标)。
Scene scene = new Scene(sc,500,400);
stage.setScene(scene);
stage.show();
for(XYChart.Data<Number,Number> dot : sc.getData().get(0).getData()) {
double xCoordinate = dot.getNode().localToScene(dot.getNode().getBoundsInLocal()).getMinX();
double yCoordinate = dot.getNode().localToScene(dot.getNode().getBoundsInLocal()).getMinY();
System.out.println(xCoordinate + "," + yCoordinate);
}