【问题标题】:Making a PieChart visible in JPanel使饼图在 JPanel 中可见
【发布时间】:2017-10-23 10:56:56
【问题描述】:

我对编程还很陌生,对于学校来说,我必须创建一个包含一定数量课程的程序。目前一切进展顺利,但我被困在数据的图形输出上。该程序是一个费用计算器。它是一个分为 6 个 JPanel 的框架。其中一个应该是我创建的饼图。饼图有效,但不会显示在我的框架中。所以我被困在如何将正确的内容调用到面板上。我要添加饼图的面板的代码是:

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());
    }

饼图的代码是:

    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();
    }
}

到目前为止的代码输出是:

如果有人可以帮助我,我会很高兴:)

提前致谢

【问题讨论】:

标签: java swing jpanel pie-chart


【解决方案1】:

这样修改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);
}
}

我用空面板测试了这个,除了饼图,它有效!

【讨论】:

  • 我试图在我的代码中实现这一点,但问题日志显示:方法 setContent(PieChart) 未定义类型 Parent HoofdPaneel.java /KostenApp/src 第 111 行和:类型不匹配: 无法从 ScrollPane 转换为 Parent HoofdPaneel.java /KostenApp/src 第 99 行 Java 问题
  • 我使用的是 javafx.scene.control.ScrollPane 而不是 java.awt.ScrollPane
  • 确实是这个问题,谢谢!
【解决方案2】:

当您在 Swing 应用程序中使用 JavaFX PieChart 时,您需要将图表括在 JFXPanel 中。不要扩展JPanel,而是按照here 显示的轮廓。显示 JavaFX Label 的完整示例显示为 here。顺便说一句,您的片段从不将pieChart 添加到布局中;也许尝试这样的事情:

root.setCenter(pieChart);

或者,使用 在布局中添加ChartPanelhere 引用了包含在分发中的完整示例。

【讨论】:

  • 您发送的链接中的信息非常有用。我去看看!:)
猜你喜欢
  • 2015-05-15
  • 2020-09-19
  • 1970-01-01
  • 2015-04-15
  • 1970-01-01
  • 1970-01-01
  • 2016-12-05
  • 1970-01-01
相关资源
最近更新 更多