NumberAxis.getDisplayPosition (...) возвращает 0 - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь получить x, y точки на LineChart<Number, Number>, чтобы я мог добавить 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(...)?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Как сказал @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
0 голосов
/ 12 декабря 2018

Если это не критично - вам не нужно генерировать проход макета здесь программно, вы можете позволить javaFX рассчитать его и обновить сразу после показа этапа.Просто переместите вашу логику после stage.show();

, и вы получите правильный вывод

  stage.show();

  System.out.println(xAxis.getDisplayPosition(9)); 

Я получил: 443.0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...