gpt4 book ai didi

java - 如何在JavaFX中制作自定义LineChart控件?

转载 作者:行者123 更新时间:2023-12-02 11:15:11 24 4
gpt4 key购买 nike

我的 JavaFX 项目中有一个自定义 LineChartWithMarkers 控件。我的 Java(FX) 编程暂停了两年,发现 Java 10 中不再存在 LineChartBuilder。我找到了一些文档,说它在版本 8 中已被弃用,但没有找到如何替换它。

如何修复我的代码以使用 Java 10?

这就是我所拥有的:

public class LineChartWithMarkersBuilder extends LineChartBuilder {
private Axis<Number> xAxis ;
private Axis<Number> yAxis ;
private ObservableList<Series<Number,Number>> data ;

public static LineChartWithMarkersBuilder create() {
return new LineChartWithMarkersBuilder();
}

public LineChartWithMarkersBuilder xAxis(Axis<Number> xAxis) {
this.xAxis = xAxis ;
return this ;
}

public LineChartWithMarkersBuilder yAxis(Axis<Number> yAxis) {
this.yAxis = yAxis ;
return this ;
}


public LineChartWithMarkers<Number, Number> build() {
xAxis = new NumberAxis();
yAxis = new NumberAxis();
return new LineChartWithMarkers<Number, Number>( xAxis, yAxis);

}
}

和自定义 LineChartWithMarkers:

public class LineChartWithMarkers<X extends Number, Y extends Number> extends LineChart<X, Y>  {

private ObservableList<Data<Number, Number>> verticalMarkers;


public LineChartWithMarkers(Axis<X> xAxis, Axis<Y> yAxis) {
super(xAxis, yAxis);
this.setCreateSymbols(false);
verticalMarkers = FXCollections.observableArrayList(data -> new Observable[] {data.XValueProperty()});
verticalMarkers.addListener((InvalidationListener)observable -> layoutPlotChildren());
}
(...)
}

我从 .fxml 中使用它,如下所示:

...
<LineChartWithMarkers fx:id="chartFit" createSymbols="false" layoutX="14.0" layoutY="54.0" prefHeight="499.0" prefWidth="987.0" AnchorPane.bottomAnchor="162.0" AnchorPane.leftAnchor="14.0" AnchorPane.rightAnchor="5.0" AnchorPane.topAnchor="54.0">
<xAxis>
<NumberAxis side="BOTTOM" />
</xAxis>
<yAxis>
<NumberAxis side="LEFT" />
</yAxis>
</LineChartWithMarkers>
...

最佳答案

所有 JavaFX 构建器类在 Java 8 中均已弃用,并在 Java 9 中删除。只需完全删除构建器类即可。要允许 FXMLLoader 顶部实例化一个没有无参构造函数的类,请在构造函数参数上使用 @NamedArg 注解:

public class LineChartWithMarkers<X extends Number, Y extends Number> extends LineChart<X, Y>  {

private ObservableList<Data<Number, Number>> verticalMarkers;


public LineChartWithMarkers(
@NamedArg("xAxis") Axis<X> xAxis,
@NamedArg("yAxis") Axis<Y> yAxis) {
super(xAxis, yAxis);
this.setCreateSymbols(false);
verticalMarkers = FXCollections.observableArrayList(data -> new Observable[] {data.XValueProperty()});
verticalMarkers.addListener((InvalidationListener)observable -> layoutPlotChildren());
}
(...)
}

关于@NamedArg注释的完整讨论可以在What is the purpose of @NamedArg annotation in javaFX 8?中找到。

关于java - 如何在JavaFX中制作自定义LineChart控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50331169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com