Javafx - 如何将饼图添加到不同的 BorderPane Class
Javafx - How to Add Pie Chart to BorderPane from Different Class
我有两个 class。主要 class 和图表 class。我的图表 class 扩展了 PieChart 并在其构造函数中实例化了一个饼图。我的主要 class 创建一个 BorderPane,然后实例化图表的对象 class(创建饼图)并将其添加到中心 pane.The 唯一的问题是我不知道使它正常工作的确切语法,特别是在我的图表 class 的构造函数中。
我知道,例如,如果我在构造函数中创建一个 HBox 而不是饼图,我可以简单地使用它。和一些方法。但是饼图在 Observable Lists 中有额外的元素,所以我不确定如何让它工作?下面是我的两个 classes。请帮忙。谢谢。
主要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);
}}
图表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?
}}
您可能正在寻找
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 class 中的一个方法。它将设置数据对象。这是处理图表或任何其他集合支持视图中数据的简单方便的方法。 (是的,它 不是仅限图表的样式 。它对于所有 JavaFX 视图几乎都是一样的。图表将监听数据变化并自行重绘 internaly.You 只需要设置你想显示的数据。在你的情况下,你有这个方法,因为你的 Chart extends PieChart
当您在 PieChart 中执行 PieChart charts = new PieChart(data);
时,它会在内部调用 setData
public PieChart(ObservableList<PieChart.Data> data){
setData(data);
...
}
所以这就是为什么您必须在扩展 class 中自己调用 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
我有两个 class。主要 class 和图表 class。我的图表 class 扩展了 PieChart 并在其构造函数中实例化了一个饼图。我的主要 class 创建一个 BorderPane,然后实例化图表的对象 class(创建饼图)并将其添加到中心 pane.The 唯一的问题是我不知道使它正常工作的确切语法,特别是在我的图表 class 的构造函数中。
我知道,例如,如果我在构造函数中创建一个 HBox 而不是饼图,我可以简单地使用它。和一些方法。但是饼图在 Observable Lists 中有额外的元素,所以我不确定如何让它工作?下面是我的两个 classes。请帮忙。谢谢。
主要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);
}}
图表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?
}}
您可能正在寻找
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 class 中的一个方法。它将设置数据对象。这是处理图表或任何其他集合支持视图中数据的简单方便的方法。 (是的,它 不是仅限图表的样式 。它对于所有 JavaFX 视图几乎都是一样的。图表将监听数据变化并自行重绘 internaly.You 只需要设置你想显示的数据。在你的情况下,你有这个方法,因为你的 Chart extends PieChart
当您在 PieChart 中执行 PieChart charts = new PieChart(data);
时,它会在内部调用 setData
public PieChart(ObservableList<PieChart.Data> data){
setData(data);
...
}
所以这就是为什么您必须在扩展 class 中自己调用 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