0

我正在为学校完成最后的编程任务,并希望以 JavaFx 中的动态饼图的形式在我的 java 应用程序中添加一个小的功能性视觉糖果。

使用 Netbeans 7.2 rc2,我从模板创建了一个 swing/javafx 混合应用程序。我扩展了 JPanelClass 以创建一个 shell,我的主应用程序可以使用它来访问 FX 功能。然而,我面临的问题是,虽然图表的初始化顺利进行,但当我尝试更新爆炸的东西时,它会生成一个空指针异常。这里我相信是相关的代码:

实例化:

public class PieChartJFxPanel extends JApplet {

  private static final int JFXPANEL_WIDTH_INT = 500;
  private static final int JFXPANEL_HEIGHT_INT = 500;

    StackPane root = new StackPane();
    PieChart athleteChart;
    ObservableList<PieChart.Data> pieChartData =FXCollections.observableArrayList();
    private static JFXPanel fxContainer;
    private int fAthletes=0;
    private int rAthletes=0;

   public PieChartJFxPanel(int totalAthletes,int finishedAthletes){
    super();
    fAthletes=finishedAthletes;
    rAthletes=totalAthletes-fAthletes;
}

@Override
public void init() {
    fxContainer = new JFXPanel();
    fxContainer.setPreferredSize(new Dimension(JFXPANEL_WIDTH_INT, JFXPANEL_HEIGHT_INT));                    
    add(fxContainer, BorderLayout.CENTER);
    // create JavaFX scene
    Platform.runLater(new Runnable() {
        @Override
        public void run() {
            createScene();
        }
    });
}

场景构造器:

private void createScene() {     
    pieChartData.add(new PieChart.Data("Finished",fAthletes));
    pieChartData.add(new PieChart.Data("Outstanding",rAthletes));               
    athleteChart=new PieChart();     
    athleteChart.setLegendVisible(false);
   athleteChart.setTitle("Race Status");
   //athleteChart.setAnimated(true);       
    athleteChart.setData(pieChartData);               

    root.getChildren().add(athleteChart);
    fxContainer.setScene(new Scene(root));        
    //


}

以及产生异常的方法:

public void setData(int total, int in){
    final  ObservableList<PieChart.Data> pieChartDat=FXCollections.observableArrayList();
    pieChartDat.add(new PieChart.Data("Finished",fAthletes));
    pieChartDat.add(new PieChart.Data("Outstanding",rAthletes));  
    athleteChart.setData(pieChartDat);                
}

还有一个例外:

Exception in thread "main" java.lang.NullPointerException
     at piechartjpanel.PieChartJFxPanel.setData(PieChartJFxPanel.java:95)
     at piechartjpanel.AthleteIOChart.setAthletes(AthleteIOChart.java:62)
     at piechartjpanel.Test.setter(Test.java:34)
     at piechartjpanel.Test.main(Test.java:48)

任何帮助表示赞赏:) 在此先感谢

4

2 回答 2

1

你从不初始化atheleteChart

athleteChart.setData(pieChartDat);

athleteChartnull何时调用它,并且永远都是。

在构造函数中初始化它或简单地将其更改为PieChart atheleteChart = new PieChart();

于 2012-07-18T21:24:17.520 回答
0

我发现因为 JavaFX 使用对象作为数据模型,所以每当更改对象的参数时,图表就会自动更新,因此在我上面发布的更改 pieChart 值的示例中,我所需要的只是类似于以下内容:

pieChartData.get(index).setValues(blah,blah);

我发现 Swing 组件也有这样做的习惯,使用对象作为动态数据类型,自动改变以反映外观以反映变化的值。我很惊讶没有人发现这一点,也许我的问题措辞不好。谢谢大家。

于 2012-09-09T20:27:38.333 回答