JavaFX: клон XYChart.Series не придурок - PullRequest
0 голосов
/ 17 декабря 2018

Hy, ребята, у меня есть эта проблема:

XYChart.Series x = (XYChart.Series)((XYChart.Series)item).clone();

Ошибка : clone() имеет защищенный доступ в java.lang.Object

Как я могу решить эту проблему?Важно, что x является копией значения , а NOT - указателем на клонированный элемент.

1 Ответ

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

Использование clone требует, чтобы этот метод был реализован типом.Основная часть, если не все классы JavaFX этого не делают, так как большинство из них содержат свойства, к которым могут быть подключены не клонируемые слушатели.

Это означает, что вам нужно реализовать копирование XYChart.Series самостоятельно.

Поскольку вам нужна глубокая копия серии, вы можете использовать следующий код.Копирование всех XYChart.Data объектов может или не может быть необходимым в зависимости от вашего варианта использования:

public static <S, T> XYChart.Series<S, T> copySeries(XYChart.Series<S, T> series) {
    XYChart.Series<S, T> copy = new XYChart.Series<>(series.getName(),
            series.getData().stream()
                  .map(data -> new XYChart.Data<S, T>(data.getXValue(), data.getYValue()))
                  .collect(Collectors.toCollection(FXCollections::observableArrayList)));
    return copy;
}

Если копирование Data объектов не является необходимым, код может быть упрощен до

public static <S, T> XYChart.Series<S, T> copySeries(XYChart.Series<S, T> series) {
    XYChart.Series<S, T> copy = new XYChart.Series<>(series.getName(),
            FXCollections.observableArrayList(series.getData()));
    return copy;
}
...