Java 使PieChart在JPanel中可见

Java 使PieChart在JPanel中可见,java,swing,jpanel,pie-chart,jfreechart,Java,Swing,Jpanel,Pie Chart,Jfreechart,我对编程相当陌生,在学校我必须创建一个包含一定数量课程的程序。现在一切都进行得很顺利,但我仍停留在数据的图形输出上。这个程序是一个费用计算器。它是一个分为6个JPanel的框架。其中一个应该是我创建的饼图。piechart可以工作,但不会显示在我的框架中。因此,我一直在思考如何在面板中调用正确的内容。我要添加piechart的面板的代码为: class CenterPaneel extends JPanel{ private static final long serialVersion

我对编程相当陌生,在学校我必须创建一个包含一定数量课程的程序。现在一切都进行得很顺利,但我仍停留在数据的图形输出上。这个程序是一个费用计算器。它是一个分为6个JPanel的框架。其中一个应该是我创建的饼图。piechart可以工作,但不会显示在我的框架中。因此,我一直在思考如何在面板中调用正确的内容。我要添加piechart的面板的代码为:

class CenterPaneel extends JPanel{
    private static final long serialVersionUID = -835526987955952967L;

    public CenterPaneel(){
        setLayout( new GridLayout(2,3,10,10));
        add( new Catagorie1Paneel() );                add( new Catagorie3Paneel() );           add( new SamenvattingPaneel() );
        add( new Catagorie2Paneel() );                add( new Catagorie4Paneel() );           add( new DataPaneel());
    }
piechart的代码是:

    class DataPaneel extends JPanel{
    private static final long serialVersionUID = -2980457707385367851L;
    private final ObservableList<PieChart.Data> details = FXCollections.observableArrayList();
    private BorderPane root;
    private PieChart pieChart;

    public void start(Stage primaryStage) {
        primaryStage.setTitle("test");
        details.addAll(new PieChart.Data("test1", 25),
                new PieChart.Data("test 2", 25),
                new PieChart.Data("test 3", 25),
                new PieChart.Data("test 4", 25)
            );


        root = new BorderPane();
        Scene scene = new Scene(root,600,500);

        pieChart = new PieChart();
        pieChart.setData(details);
        pieChart.setTitle("test");
        pieChart.setLegendSide(Side.BOTTOM);
        pieChart.setLabelsVisible(true);

        primaryStage.setScene(scene);
        primaryStage.show();
    }
}
classdatapaneel扩展了JPanel{
私有静态最终长serialVersionUID=-29804577073855367851L;
private final ObservableList details=FXCollections.observableArrayList();
私有边界根;
私人海图;
公共无效开始(阶段primaryStage){
初级阶段。设置标题(“测试”);
详细信息。添加所有(新图表数据(“测试1”,25),
新图表数据(“试验2”,25),
新图表数据(“试验3”,25),
新图表数据(“测试4”,25)
);
root=新边框窗格();
场景=新场景(根,600500);
pieChart=新pieChart();
pieChart.setData(详细信息);
pieChart.setTitle(“测试”);
pieChart.setLegendSide(侧.底);
pieChart.setLabelsVisible(真);
初级阶段。场景(场景);
primaryStage.show();
}
}
到目前为止,代码的输出是:

如果有人能帮助我,我会非常高兴:)

提前感谢您在Swing应用程序中使用JavaFX时,您需要将图表附在一个表格中。不要扩展
JPanel
,而是遵循所示的大纲。下面显示了显示JavaFX
标签的完整示例。顺便说一句,您的片段从不将
pieChart
添加到布局中;也许可以试试这样:

root.setCenter(pieChart);
或者,将
图表面板
使用添加到布局中;引用了一个完整的示例,包括在发行版中。

通过以下方式修改
CenterPaneel
的构造函数:

   import javafx.collections.FXCollections;
   import javafx.collections.ObservableList;
   import javafx.embed.swing.JFXPanel;
   import javafx.geometry.Side;
   import javafx.scene.Scene;
   import javafx.scene.chart.PieChart;
   import javafx.scene.control.ScrollPane;
   import javax.swing.JFrame;
   import javax.swing.JPanel;

public class Pie_Chart extends JFrame {

public static void main(String[] args) {
    Pie_Chart pc=new Pie_Chart();
    pc.getContentPane().add(new CenterPaneel());
    pc.setVisible(true);
}
}


class CenterPaneel extends JPanel{
private final static ObservableList<PieChart.Data> details =   FXCollections.observableArrayList();
private static PieChart pieChart;
    public CenterPaneel(){
    setLayout( new GridLayout(2,3,10,10));


    final JFXPanel dataPaneel = new JFXPanel();

    ScrollPane sp = new ScrollPane();

    details.addAll(new PieChart.Data("test1", 25),
            new PieChart.Data("test 2", 25),
            new PieChart.Data("test 3", 25),
            new PieChart.Data("test 4", 25)
        );
    pieChart = new PieChart();
    pieChart.setData(details);
    pieChart.setTitle("test");
    pieChart.setLegendSide(Side.BOTTOM);
    pieChart.setLabelsVisible(true);
    sp.setContent(pieChart);

    Scene scene = new Scene(sp, 600, 500);
    dataPaneel.setScene(scene);

    add( new Catagorie1Paneel() );                add( new Catagorie3Paneel() );           add( new SamenvattingPaneel() );
    add( new Catagorie2Paneel() );                add( new Catagorie4Paneel() );           add( dataPaneel);
}
}
导入javafx.collections.FXCollections;
导入javafx.collections.ObservableList;
导入javafx.embed.swing.JFXPanel;
导入javafx.geometry.Side;
导入javafx.scene.scene;
导入javafx.scene.chart.PieChart;
导入javafx.scene.control.ScrollPane;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
公共类饼图扩展JFrame{
公共静态void main(字符串[]args){
饼图pc=新饼图();
pc.getContentPane().add(新的CenterPaneel());
pc.setVisible(真);
}
}
类CenterPanel扩展了JPanel{
private final static ObservableList details=FXCollections.observableArrayList();
专用静态柱状图柱状图;
公共中心(){
setLayout(新网格布局(2,3,10,10));
最终JFXPanel数据面板=新JFXPanel();
ScrollPane sp=新的ScrollPane();
详细信息。添加所有(新图表数据(“测试1”,25),
新图表数据(“试验2”,25),
新图表数据(“试验3”,25),
新图表数据(“测试4”,25)
);
pieChart=新pieChart();
pieChart.setData(详细信息);
pieChart.setTitle(“测试”);
pieChart.setLegendSide(侧.底);
pieChart.setLabelsVisible(真);
sp.setContent(pieChart);
场景=新场景(sp,600500);
dataPaneel.setScene(场景);
添加(新类别1Paneel());添加(新类别3Paneel());添加(新SamenvattingPaneel());
添加(新类别2paneel());添加(新类别4paneel());添加(dataPaneel);
}
}

我用空面板测试了这个,除了PieChart,它成功了

好吧,你可以看看像JFreeCharts这样的东西,或者你可以看看你发送的链接中真正有用的信息。我来看看!:)我试图在代码中实现这一点,但问题日志显示:方法setContent(PieChart)未定义父HoofdPaneel.java/KostenApp/src行111和:类型不匹配:无法从ScrollPane转换为父HoofdPaneel.java/KostenApp/src行99 java问题我使用的是javafx.scene.control.ScrollPane而不是java.awt.ScrollPaneth这确实是问题所在,谢谢!