динамическое изменение xAxis в LineChart JavaFX
Я пытаюсь реализовать lineChart в JavaFX. Он должен:
- Изначально иметь линейную ось X (xAxis),
- При нажатии на кнопку менять ось на логарифмическую ось X
Проблема в том, что LineChart не имеет метода setAxis. Другая проблема в том, что моя архитектура спроектирована таким образом, что я не могу просто перерисовать LineChart.
Я попробовала просто пересчитать значения оси X. Но в этом случае отметки (ticks) располагаются неправильно, и диаграмма схлопывается по горизонтали.
Затем я реализовала свой собственный класс LogarithmicAxis, который наследуется от ValueAxis. Он работает правильно, и если я создам lineChart таким образом:
NumberAxis yAxis = new NumberAxis();
LogarithmicAxis xAxis = new LogarithmicAxis();
LineChart<Number, Number> lineChart = new LineChart<>(xAxis, yAxis);
Я получаю то, что мне нужно. Но я не могу динамически менять ось
Мой код представления состоит из методов типа
public Region build() {
GridPane gridPane = new GridPane();
ColumnConstraints col1 = new ColumnConstraints();
gridPane.getColumnConstraints().addAll(col1);
gridPane.add(createSettingsBox(), 0, 0, 0, 0);
return gridPane;
}
private Node createSettingsBox() {
VBox settingsBox = new VBox(10);
settingsBox.getChildren().add(createButton());
return settingsBox;
}
Но как мне добраться до диаграммы и перерисовать ее, если у нее высокий уровень вложенности? Я не хочу выносить lineChart в поле представления.
Ответы (1 шт):
Первое, что приходит в голову - заменить весь LineChart. Находите родителя (желательно чтобы это был AnchorPane) линейного LineChart, очищаете его и вставляете логарифмический LineChart.
LineChart<Number, Number> logaLineChart = new LineChart<>(new LogarithmicAxis(), new NumberAxis());
AnchorPane parent = (AnchorPane) lineLineChart.getParent();
parent.getChildren().clear();
parent.getChildren().add(logaLineChart);
Если привязать родителя в окне, то будет вставляться в тоже место.