Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaFX选项卡中显示JFreeChart?_Java_Javafx_Javafx 8_Jfreechart_Scenebuilder - Fatal编程技术网

如何在JavaFX选项卡中显示JFreeChart?

如何在JavaFX选项卡中显示JFreeChart?,java,javafx,javafx-8,jfreechart,scenebuilder,Java,Javafx,Javafx 8,Jfreechart,Scenebuilder,我试图在JavaFX应用程序中显示JFreeChart PieChart。如果有帮助的话,我正在使用SceneBuilder。下面是创建要添加到initialize方法中的图表的代码: private static PieDataset createDataset() { DefaultPieDataset dataset = new DefaultPieDataset(); AnnonceService sa = AnnonceService.getInstance();

我试图在JavaFX应用程序中显示JFreeChart PieChart。如果有帮助的话,我正在使用SceneBuilder。下面是创建要添加到initialize方法中的图表的代码:

private static PieDataset createDataset() {
    DefaultPieDataset dataset = new DefaultPieDataset();
    AnnonceService sa = AnnonceService.getInstance();
    Annonce a = sa.last();
    dataset.setValue("Les offres",a.getNbr_o());
    dataset.setValue("Les demandes", a.getNbr_d());        
    return dataset;
}

private static JFreeChart createChart(PieDataset dataset) {
    JFreeChart chart = ChartFactory.createPieChart(
        "Les offres par rapport aux demandes", dataset);
    return chart;
}

从这个完整的页面开始,我构建了一个包含三个新选项卡的页面。每个
选项卡
都包含一个新的
图表查看器
,每个
图表查看器
都包含一个具有不同名称的饼图。最后,我使用
选项卡窗格
作为其根节点创建了一个
场景
,从而设置了
阶段

TabPane tabPane = new TabPane(
    new Tab("Tab 1", new ChartViewer(createChart("One"))),
    new Tab("Tab 2", new ChartViewer(createChart("Two"))),
    new Tab("Tab 3", new ChartViewer(createChart("Three")))
);
stage.setScene(new Scene(tabPane));

经测试:

import java.awt.Color;
import java.awt.Font;
import java.text.DecimalFormat;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.stage.Stage;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.fx.ChartViewer;
import org.jfree.chart.labels.PieSectionLabelGenerator;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;

/**
 * @see https://stackoverflow.com/a/55737893/230513
 * @see https://stackoverflow.com/q/44289920/230513
 */
public class PieChartFX extends Application {

    private static PieDataset createDataset() {
        DefaultPieDataset dataset = new DefaultPieDataset();
        dataset.setValue("A", 0.8);
        dataset.setValue("B", 9.4);
        dataset.setValue("C", 0.1);
        dataset.setValue("D", 89.5);
        dataset.setValue("E", 0.2);
        dataset.setValue("F", 0.0);
        return dataset;
    }

    private static JFreeChart createChart(String name) {
        PieDataset dataset = createDataset();
        JFreeChart chart = ChartFactory.createPieChart(
            name, dataset, false, true, false);
        PiePlot plot = (PiePlot) chart.getPlot();
        plot.setOutlineVisible(false);
        plot.setSectionPaint("A", Color.RED);
        plot.setSectionPaint("B", Color.BLUE);
        plot.setSectionPaint("C", Color.GREEN);
        plot.setSectionPaint("D", Color.YELLOW);
        plot.setSectionPaint("E", Color.CYAN);
        plot.setLabelFont(new Font(Font.SANS_SERIF, Font.BOLD, 16));
        // Custom labels https://stackoverflow.com/a/17507061/230513
        PieSectionLabelGenerator gen = new StandardPieSectionLabelGenerator(
            "{0}: {2}", new DecimalFormat("0"), new DecimalFormat("0.0%"));
        plot.setLabelGenerator(gen);
        return chart;
    }

    @Override
    public void start(Stage stage) {
        TabPane tabPane = new TabPane(
            new Tab("Tab 1", new ChartViewer(createChart("One"))),
            new Tab("Tab 2", new ChartViewer(createChart("Two"))),
            new Tab("Tab 3", new ChartViewer(createChart("Three")))
        );
        stage.setScene(new Scene(tabPane));
        stage.setTitle("JFreeChart: PieChartFX");
        stage.setWidth(600);
        stage.setHeight(400);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}