FXML 中的 Javafx 圆环图

标签 java charts javafx fxml pie-chart

我想在 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/

相关文章:

python - 如何使用 XLSXWRITER 的 set_y2_axis 函数设置最大边界?

php - Google Charts 日期时间问题,现在不显示 JSON 数据

java - Core.rectangle 返回 cannot resolve method 错误 in openCv 3.0

java - 使用 MySQL 查询结果设置 DatePicker 值

java - 无法发现客户端/服务器程序中的死锁

java - 智能 : Is there an Intention Action to convert old style Log4J calls to new style SLF4J calls?

javascript - 直到可视化结束,气泡才能够承受 - Google Motion Bubble Chart

java - java中如何进行字符串的模式匹配?

java - 迭代链表的差异

javafx-2 - FXML 加载期间的 JavaFX IllegalAccessException()