JavaFX:克隆XYChart.Series不起作用

时间:2018-12-16 22:53:22

标签: java javafx charts clone linechart

嗨,我有这个问题:

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

错误clone()java.lang.Object中具有受保护的访问权限

我该如何解决? 重要的是,x是值的副本不能指向克隆项目的指针。

1 个答案:

答案 0 :(得分:1)

使用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;
}