0

私は学校の最後のプログラミング タスクに取り組んでおり、JavaFx の動的な円グラフの形で、Java アプリケーションに小さな機能的な目の保養を追加したいと考えていました。

Netbeans 7.2 rc2 を使用して、テンプレートから swing/javafx ハイブリッド アプリケーションを作成しました。JPanelClass を拡張して、メイン アプリケーションが FX 機能にアクセスするために使用できるシェルを作成しました。ただし、私が直面している問題は、チャートの初期化がスムーズに行われている一方で、爆破されたものを更新しようとすると、Null Pointer Exception が生成されることです。ここに関連するコードがあると思います:

インスタンス化:

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

athleteChartこれが呼び出されるnullときであり、常に呼び出されます。

コンストラクターで初期化するか、単に次のように変更します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 に答える