【问题标题】:JavaFX: clone XYChart.Series doesn't dorkJavaFX:克隆 XYChart.Series 不傻
【发布时间】:2018-12-16 22:53:21
【问题描述】:

大家好,我有这个问题:

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

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

我该如何解决? x 是一个值的副本并且不是指向克隆项的指针,这一点很重要。

【问题讨论】:

    标签: java javafx charts clone linechart


    【解决方案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;
    }
    

    【讨论】:

    • 谢谢兄弟!第一个sn-p是完美的
    猜你喜欢
    • 1970-01-01
    • 2010-10-19
    • 2012-10-06
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    相关资源
    最近更新 更多