我想在 JavaFX 上做一个圆环图/圆环图并搜索我来到这个例子:Can PieChart from JavaFX be displayed as a doughnut?
我工作得很好,但是因为我使用 FXML 来制作我的 GUI,所以我不能使用这个例子。首先,我尝试将 DoughtnutChart.java 类作为 @FXML var 添加到我要插入它的面板的 Controller 类中,但启动时出错。
然后在谷歌搜索将DoughnutChart做成自定义组件,但是所有的例子都是基于Panes的。另外,如果我尝试将我的 donu.jar 导入到 SceneBuilder,选择组件的窗口是空的。
所以,我的问题是:当我的 GUI 在 FXML 上制作时,如何在 JavaFX 上实现这个圆环图?
非常感谢。
最佳答案
如果不查看 FXML 和错误消息,很难判断错误的原因。
我很容易让它工作:需要注意的一件事是 FXMLLoader
通过调用无参数构造函数来实例化类。如果找不到,它会尝试使用构建器类作为后备计划。因此,您需要对 @jewelsea's DoughnutChart 进行一次修改实现是添加一个无参数的构造函数。 (您也可以定义一个 DoughnutClassBuilder
,但这需要更多的工作,并且不会给您带来任何额外的好处。)所以我这样做了:
package doughnut ;
// imports as before...
public class DoughnutChart extends PieChart {
private final Circle innerCircle;
public DoughnutChart() {
this(FXCollections.observableArrayList());
}
// everything else as before...
}
然后是以下 FXML:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.StackPane?>
<?import doughnut.DoughnutChart?>
<StackPane xmlns:fx="http://javafx.com/fxml" fx:controller="doughnut.SampleController">
<DoughnutChart fx:id="doughnutChart" />
</StackPane>
使用 Controller SampleController.java:
package doughnut;
import javafx.fxml.FXML;
import javafx.scene.chart.PieChart;
public class SampleController {
@FXML
private PieChart doughnutChart ;
public void initialize() {
doughnutChart.getData().addAll(
new PieChart.Data("Grapefruit", 13),
new PieChart.Data("Oranges", 25),
new PieChart.Data("Plums", 10),
new PieChart.Data("Pears", 22),
new PieChart.Data("Apples", 30));
}
}
和应用类
package doughnut;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
StackPane root = (StackPane)FXMLLoader.load(getClass().getResource("DoughnutChartDemo.fxml"));
Scene scene = new Scene(root,400,400);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
完全按照预期工作。
关于FXML 中的 Javafx 圆环图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25309275/