我有两节课。 Main类和Chart类。我的Chart类扩展了PieChart并在其构造函数中实例化了一个饼图。我的主类创建一个BorderPane,然后我实例化Chart类的一个对象(创建饼图)并将其添加到中心窗格。唯一的问题是我不知道使其正常工作的确切语法,特别是在我的Chart类的构造函数中。
我知道,例如,如果我在构造函数中创建HBox而不是饼图,我可以简单地使用它。和一些方法。但饼图有额外的元素与Observable Lists,所以我不知道如何使这项工作?以下是我的两个课程。请帮忙。谢谢。
MAIN CLASS
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);
}}
CHART CLASS
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?
}}
答案 0 :(得分:1)
您可能正在寻找
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数据)是PieChart类的一种方法。它将设置数据对象。在图表或任何其他集合驱动的视图中处理数据只是简单方便的方法。 (是的,它是不是仅图表样式。对于所有JavaFX视图来说几乎都是一样的。图表将监听数据更改并重新绘制内部。您只需要设置您想要的数据要显示。在你的情况下你有这个方法,因为你的Chart extends PieChart
当您在PieChart中执行PieChart charts = new PieChart(data);
时,它将调用setData internaly
public PieChart(ObservableList<PieChart.Data> data){
setData(data);
...
}
这就是为什么你必须在扩展类中自己调用super(data)或setData(data)的原因。但是如果你想要图表,你不必每次都重新创建整个图表。可以使用charts.setData(someData)
更改数据,也可以使用charts.getData()
获取数据列表对象,然后进行更改。
例如:
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