gpt4 book ai didi

Javafx - 如何将饼图从不同的类添加到 BorderPane

转载 作者:行者123 更新时间:2023-11-30 08:09:14 26 4
gpt4 key购买 nike

我有两个类。一个 Main 类和一个 Chart 类。我的 Chart 类扩展了 PieChart 并在其构造函数中实例化了饼图。我的主类创建一个 BorderPane,然后实例化 Chart 类的一个对象(创建饼图)并将其添加到中心 Pane 。唯一的问题是我不知道使其正常工作的确切语法,特别是在我的 Chart 类的构造函数。

我知道,例如,如果我在构造函数中创建一个 HBox 而不是饼图,我可以简单地使用它。以及一些方法。但是饼图有带有可观察列表的附加元素,所以我不确定如何使其工作?下面是我的两个类。请帮忙。谢谢。

主类

public class Main extends Application {
@Override
public void start(Stage primaryStage) {
BorderPane border = new BorderPane();

Chart chart = new Chart();

border.setCenter(chart);

Scene scene = new Scene (border, 640,680);
primaryStage.setScene(scene);
primaryStage.show();

}
public static void main(String[] args) {
launch(args);
}}

图表类

public class Chart extends PieChart{

public Chart(){
ObservableList<PieChart.Data>pieChart = FXCollections.observableArrayList(
new PieChart.Data("Fruits", 75),
new PieChart.Data("Vegetables", 25)
);

PieChart chart = new PieChart(pieChart);

//What code can create the Pie Chart here? Is the solution to place the chart on it's own pane instead?
}}

最佳答案

您可能正在寻找

public Chart(){
ObservableList<PieChart.Data>pieChart = FXCollections.observableArrayList(
new PieChart.Data("Fruits", 75),
new PieChart.Data("Vegetables", 25)
);
setData(pieChart);
// no need for this -> PieChart chart = new PieChart(pieChart);
}

public Chart(){
super(FXCollections.observableArrayList(
new PieChart.Data("Fruits", 75),
new PieChart.Data("Vegetables", 25)
));
}

评论后编辑: setData(ObservableList data) 是 PieChart 类的方法。并且它会设置数据对象。这是处理图表或任何其他集合支持的 View 中的数据的简单便捷的方法。 (是的,它不是仅限图表的样式。它对于所有 JavaFX View 几乎都是相同的。图表将监听数据更改并在内部重新绘制自身。您只需设置您想要的数据显示。在您的情况下,您有此方法,因为您的 Chart 扩展了 PieChart

当您在 PieChart 中执行 PieChart Charts = new PieChart(data); 时,它将在内部调用 setData

public PieChart(ObservableList<PieChart.Data> data){
setData(data);
...
}

这就是为什么您必须在扩展类中自己调用 super(data) 或 setData(data) 的原因。但如果您想更改图表,则不必每次都重新创建整个图表。可以使用 charts.setData(someData) 更改数据,或者使用 charts.getData() 获取数据 List 对象,然后更改它。

例如:

PieChart charts = new PieChart();
ObservableList<PieChart.Data> pieChart = ...
charts.setData(pieChart);
// pieChart == charts.getData() // this is the same object. so
pineChart.add(new PieChart.Data("New Fruit", 75)) // will change chart

顺便说一句,看看这个教程 https://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm

关于Javafx - 如何将饼图从不同的类添加到 BorderPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30650376/

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