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

时间:2015-06-04 17:26:45

标签: java charts javafx

我有两节课。 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?
}}

1 个答案:

答案 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